zhihuazhu 发表于 2016-11-18 22:23:45

求教大神,,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
只有前面几组是对的,后面貌似都溢出了,求问是什么原因??

275891381 发表于 2016-11-19 10:26:26

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;
    }
}
}


//你试试这个,感觉是串口溢出的问题

zhihuazhu 发表于 2016-11-19 12:13:14

275891381 发表于 2016-11-19 10:26
//你试试这个,感觉是串口溢出的问题

哇塞,大神你帮了我大忙了
不过主程序少了一句serialEvent();
现在已经可以接收正确的数据了
太谢谢大神了

275891381 发表于 2016-11-19 12:20:25

zhihuazhu 发表于 2016-11-19 12:13
哇塞,大神你帮了我大忙了
不过主程序少了一句serialEvent();
现在已经可以接收正确的数据了


serialEvent();不用要 他是串口的中断函数 自己会调用

不过为了容错,接收两次一次有效,程序里面有,不过应该不影响速度
页: [1]
查看完整版本: 求教大神,,arduino接收传感器串口数据出现问题