极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16029|回复: 3

求教大神,,arduino接收传感器串口数据出现问题

[复制链接]
发表于 2016-11-18 22:23:45 | 显示全部楼层 |阅读模式
用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[5];
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[i]=Serial1.read();
                   delay(10);
               }
  
                 flag=1;  
           }            
    }
    }
    if(flag==1)
    {
           byte high=jieshou[3];
           byte low=jieshou[4];
           int x=(high<<8)|low;
           
           Serial.print(x);
         
         
          for(int i=0;i<5;i++)
          {
            //  Serial.write(jieshou[i]);
              jieshou[i]=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
只有前面几组是对的,后面貌似都溢出了,求问是什么原因??
回复

使用道具 举报

发表于 2016-11-19 10:26:26 | 显示全部楼层
  1. byte incomingByte = 0;          // 接收到的 data byte
  2. String inputString = "";         // 用来储存接收到的内容
  3. int data[7];
  4. int inputString_is_ok=0;
  5. int data_is_ok=0;
  6.        byte wei=0;
  7. void setup()
  8. {
  9.   Serial.begin(115200);
  10.   
  11.   Serial1.begin(115200); //设定通讯端口及速率
  12.   Serial1.write(0xFF);
  13.   Serial1.write(0xCC);
  14.   Serial1.write(0x03);
  15.   Serial1.write(0xA3);
  16.   Serial1.write(0xA0);//给传感器发送指令,让其工作,发送数据
  17.   Serial1.flush();
  18. }
  19.   
  20.   
  21. void loop()
  22. {
  23.   if(inputString_is_ok==1)
  24.   {
  25.       for(int i=0;i<16;i++)
  26.       {
  27.           if((byte)inputString[i]==0xff&&(byte)inputString[i+1]==0xcc)
  28.           {
  29.               
  30.               while(wei<7)
  31.               {
  32.                   data[wei]=(byte)inputString[i];
  33.                  // Serial.write(data[wei]);
  34.                   wei++;
  35.                   i++;
  36.               }
  37.               wei=0;
  38.               if((byte)inputString[i]==0xff&&(byte)inputString[i+1]==0xcc)
  39.               {
  40.                    data_is_ok=1;
  41.                    break;
  42.               }
  43.           }
  44.       }
  45.       if(data_is_ok==1)
  46.       {
  47.           Serial.println(data[5]*256+data[6]);
  48.           data_is_ok=0;
  49.           for(int i=0;i<7;i++)data[i]=0;
  50.       }
  51.       inputString = "";
  52.       inputString_is_ok=0;
  53.   }
  54. }
  55.   

  56. void serialEvent()
  57. {
  58.   static int num=0;
  59.   while (Serial1.available())
  60.   {   
  61.     incomingByte = Serial1.read();              //一个字节一个字节地读,下一句是读到的放入字符串数组中组成一个完成的数据包
  62.     inputString += (char) incomingByte;     // 全双工串口可以不用在下面加延时,半双工则要加的//
  63.     num++;
  64.     if(num==16)
  65.     {   
  66.         Serial1.flush();num=0;inputString_is_ok=1;break;
  67.     }
  68.   }
  69. }
复制代码



//你试试这个,感觉是串口溢出的问题
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-11-19 12:13:14 | 显示全部楼层
275891381 发表于 2016-11-19 10:26
//你试试这个,感觉是串口溢出的问题

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

使用道具 举报

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

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

不过为了容错,接收两次一次有效,程序里面有,不过应该不影响速度
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-10 00:14 , Processed in 0.055435 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表