本帖最后由 s1213 于 2013-8-20 14:37 编辑
如果要是采用arduino自带的SoftSerial 软件模拟的串口,输入多个字符出现乱码,或者每次显示的是第一个字符,求高手解决
经试验加入 mySerial.println(comdata.length());后 输出为1 ,也就是说comdata只读到了一个字符。求解???
// send 0x01 , 0x02 ,0x03 then see the LED on P1
#include <TinyPinChange.h>
#include <SoftSerial.h>
#define RxD 2
#define TxD 3
#define cardread 4
#define led 13
SoftSerial mySerial(RxD, TxD);
uint8_t VirtualPortNb;
volatile byte swith = 0;
String comdata = "";
void setup()
{
TinyPinChange_Init();
mySerial.begin(9600);
VirtualPortNb=TinyPinChange_RegisterIsr(RxD, softSerialEvent);
TinyPinChange_EnablePin(RxD);
pinMode(1, OUTPUT); //LED on Model A for debugging
}
/* Function called in interruption in case of change on pins */
void softSerialEvent(void)
{
int inByte;
uint8_t PortChange;
PortChange = TinyPinChange_GetPinEvent(VirtualPortNb);
if(PortChange & TinyPinChange_PinToMsk(RxD)) /* Check if we have received something */
{
while (mySerial.available() > 0)
{
comdata += char(mySerial.read());
delay(1000);
}
if (comdata.length() > 0)
{
mySerial.println(comdata.length());
mySerial.print(comdata);
if(comdata=="3C00B60D0A8D"||comdata=="560003A727D5")
{swith=1;}
comdata = "";
}
}
}
void loop()
{
program(swith);
}
void program(byte seq)
{
switch(seq)
{
case 1:
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(100);
break;
case 2:
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(100);
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(100);
break;
case 3:
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(100);
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(100);
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(100);
break;
default:
digitalWrite(led, HIGH);
delay(2000);
digitalWrite(led, LOW);
delay(2000);
break;
}
} |