求教大神,,arduino接收传感器串口数据出现问题
用arduino接收呼吸传感器数据,发送0xFF 0xCC 0x03 0xA3 0xA1,传感器便会工作发送数据给arduino接收的数据格式是0xFF 0xCC 0x05 0XA5 0xA0 MBH MBL,最后两个数据分别为所得数据的高低字节,我的程序如下
void setup() {
Serial1.begin(115200);
Serial.begin(115200);
Serial1.write(0xFF);
Serial1.write(0xCC);
Serial1.write(0x03);
Serial1.write(0xA3);
Serial1.write(0xA0);//给传感器发送指令,让其工作,发送数据。
delay(1000);
}
byte jieshou;
int flag=0;
byte inByte;
void loop() {
if (Serial1.available() > 0&&flag==0)
{
inByte=Serial1.read();
delay(10);
if(inByte==0xff)
{
if(Serial1.available())
inByte=Serial1.read();
delay(10);
if(inByte==0xcc)
{
for(int i=0;i<5;i++)
{
if(Serial1.available())
jieshou=Serial1.read();
delay(10);
}
flag=1;
}
}
}
if(flag==1)
{
byte high=jieshou;
byte low=jieshou;
int x=(high<<8)|low;
Serial.print(x);
for(int i=0;i<5;i++)
{
//Serial.write(jieshou);
jieshou=0x00;
}
flag=0;
}
}
用串口助手看x的数据,发现是
0
474
472
473
472
471
472
471
472
-13057
-13057
-13057
-11009
-13057
-13057
-13057
-13057
-13057
-13057
-13057
-13057
-13057
-13057
-13057
-13057
-13057
-13057
-13057
-13057
-13057
-13057
-13057
-13057
只有前面几组是对的,后面貌似都溢出了,求问是什么原因?? byte incomingByte = 0; // 接收到的 data byte
String inputString = ""; // 用来储存接收到的内容
int data;
int inputString_is_ok=0;
int data_is_ok=0;
byte wei=0;
void setup()
{
Serial.begin(115200);
Serial1.begin(115200); //设定通讯端口及速率
Serial1.write(0xFF);
Serial1.write(0xCC);
Serial1.write(0x03);
Serial1.write(0xA3);
Serial1.write(0xA0);//给传感器发送指令,让其工作,发送数据
Serial1.flush();
}
void loop()
{
if(inputString_is_ok==1)
{
for(int i=0;i<16;i++)
{
if((byte)inputString==0xff&&(byte)inputString==0xcc)
{
while(wei<7)
{
data=(byte)inputString;
// Serial.write(data);
wei++;
i++;
}
wei=0;
if((byte)inputString==0xff&&(byte)inputString==0xcc)
{
data_is_ok=1;
break;
}
}
}
if(data_is_ok==1)
{
Serial.println(data*256+data);
data_is_ok=0;
for(int i=0;i<7;i++)data=0;
}
inputString = "";
inputString_is_ok=0;
}
}
void serialEvent()
{
static int num=0;
while (Serial1.available())
{
incomingByte = Serial1.read(); //一个字节一个字节地读,下一句是读到的放入字符串数组中组成一个完成的数据包
inputString += (char) incomingByte; // 全双工串口可以不用在下面加延时,半双工则要加的//
num++;
if(num==16)
{
Serial1.flush();num=0;inputString_is_ok=1;break;
}
}
}
//你试试这个,感觉是串口溢出的问题 275891381 发表于 2016-11-19 10:26
//你试试这个,感觉是串口溢出的问题
哇塞,大神你帮了我大忙了
不过主程序少了一句serialEvent();
现在已经可以接收正确的数据了
太谢谢大神了 zhihuazhu 发表于 2016-11-19 12:13
哇塞,大神你帮了我大忙了
不过主程序少了一句serialEvent();
现在已经可以接收正确的数据了
serialEvent();不用要 他是串口的中断函数 自己会调用
不过为了容错,接收两次一次有效,程序里面有,不过应该不影响速度
页:
[1]