hhhwwwyyy 发表于 2017-3-20 16:09:45

跪求大神!!Arduino串口接收传感器数据问题

小白我刚接触Arduino开发板,现在手头有一个红外气体传感器五合一(能检测五种气体浓度),传感器的通讯协议如下图:


下面是代码,问题是在串口监视器上接收的数据不正确,而且会有乱码。出错的主要是串口接收函数编写错误,求大神们告知,该如何修改代码!!!
#include<SoftwareSerial.h>
SoftwareSerial mySerial(2,3); //定义软串口

String sensor_data = "";
int spPosition; //截止符的标志
int mark = 0;

void setup(){
Serial.begin(115200);
mySerial.begin(115200);
delay(5000);
mySerial.write("M1\r");//M1命令启动传感器传输数据
}

void loop(){

   while (mySerial.available() > 0)   //判断是否有数据
    {
      sensor_data += char(mySerial.read()); //依次读取数据并串成字符串
      delay(1);
      mark = 1;
    }
    if(mark == 1){
      spPosition = sensor_data.indexOf('\r'); //判断截止符的位置

      if((spPosition != -1)){
      Serial.println(sensor_data.substring(0,spPosition)); //打印截止符前的字符串
      sensor_data = sensor_data.substring(spPosition+1,sensor_data.length());
      }
    }
      else{
      if(sensor_data.length() > 0)
         Serial.println(sensor_data);
         sensor_data = "";//清空字符串,以便下次重新接受数据
      }
    }

zjz5717 发表于 2017-3-20 22:15:28

你能把你的串口监视器的图片上传一下吗

hhhwwwyyy 发表于 2017-3-21 09:12:17

zjz5717 发表于 2017-3-20 22:15
你能把你的串口监视器的图片上传一下吗

会有乱码 而且正常测量的CO2值也不正常!! 麻烦大神看下!!

zjz5717 发表于 2017-3-21 21:54:57

首先说传感器数据的事情,因为我没有用过你说的这个传感器,我查了一下,1000ppm以内是空气清新,1000-2000就是空气污浊,不知道是因为空气的原因还是什么
乱码的问题,一般情况下我读取数据我使用delay(2)以上的,我认为delay2已经是最小值了,你可以修改测试一下,第20行

hhhwwwyyy 发表于 2017-3-22 09:36:05

zjz5717 发表于 2017-3-21 21:54
首先说传感器数据的事情,因为我没有用过你说的这个传感器,我查了一下,1000ppm以内是空气清新,1000-2000 ...

1.我就在办公室内测量的不至于空气污浊吧。。。而且传感器通电时间久了 数值还会更高
2.改成delay(2)也没用

还是谢谢你!!

弘毅 发表于 2017-3-22 12:44:02

软串口不可以开这么高的波特率的,会有问题。这么高波特率只能用硬串口。

hhhwwwyyy 发表于 2017-3-22 13:56:59

弘毅 发表于 2017-3-22 12:44
软串口不可以开这么高的波特率的,会有问题。这么高波特率只能用硬串口。

感谢 大神!!!我之前串口监视器上的乱码问题果然是因为软串口波特率过高造成的,但是我现在接收到的数据更离谱,看来我的数据接收代码还存在严重问题。。。

弘毅 发表于 2017-3-22 14:41:03

hhhwwwyyy 发表于 2017-3-22 13:56
感谢 大神!!!我之前串口监视器上的乱码问题果然是因为软串口波特率过高造成的,但是我现在接收到的数 ...

你用的UNO只有一个硬串口,你又和传感器通信,又往电脑发送信息,可能会有冲突问题,推荐用MEGA2560来测试,测试好的代码移植到UNO上就可以。

hhhwwwyyy 发表于 2017-3-22 15:26:25

弘毅 发表于 2017-3-22 14:41
你用的UNO只有一个硬串口,你又和传感器通信,又往电脑发送信息,可能会有冲突问题,推荐用MEGA2560来测 ...

感谢大神指导 不过现在手头没那东西。。想顺便问下大神 如果我这个用中断(interrupt)方式接收数据会不会好一点,具体代码又是如何实现呢我是新手 想了好久没想通。。

zjz5717 发表于 2017-3-22 21:56:48

hhhwwwyyy 发表于 2017-3-22 13:56
感谢 大神!!!我之前串口监视器上的乱码问题果然是因为软串口波特率过高造成的,但是我现在接收到的数 ...

这数据也是醉了。。。这不像是软件的问题。。。
页: [1]
查看完整版本: 跪求大神!!Arduino串口接收传感器数据问题