设为首页收藏本站

极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 556|回复: 9

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

[复制链接]
发表于 2017-3-20 16:09:45 | 显示全部楼层 |阅读模式
小白我刚接触Arduino开发板,现在手头有一个红外气体传感器五合一(能检测五种气体浓度),传感器的通讯协议如下图:


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

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

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

  12. void loop(){

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

  21.       if((spPosition != -1)){
  22.         Serial.println(sensor_data.substring(0,spPosition)); //打印截止符前的字符串
  23.         sensor_data = sensor_data.substring(spPosition+1,sensor_data.length());
  24.         }
  25.     }
  26.       else{
  27.         if(sensor_data.length() > 0)
  28.            Serial.println(sensor_data);
  29.            sensor_data = "";  //清空字符串,以便下次重新接受数据
  30.       }
  31.     }
复制代码

传感器引脚

传感器引脚

传感器通讯协议1

传感器通讯协议1

传感器通讯协议2

传感器通讯协议2
回复

使用道具 举报

发表于 2017-3-20 22:15:28 | 显示全部楼层
你能把你的串口监视器的图片上传一下吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-21 09:12:17 | 显示全部楼层
zjz5717 发表于 2017-3-20 22:15
你能把你的串口监视器的图片上传一下吗

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

传感器说明

传感器说明

传感器预热阶段数据

传感器预热阶段数据

传感器正常测量的数据

传感器正常测量的数据
回复 支持 反对

使用道具 举报

发表于 2017-3-21 21:54:57 | 显示全部楼层
首先说传感器数据的事情,因为我没有用过你说的这个传感器,我查了一下,1000ppm以内是空气清新,1000-2000就是空气污浊,不知道是因为空气的原因还是什么
乱码的问题,一般情况下我读取数据我使用delay(2)以上的,我认为delay2已经是最小值了,你可以修改测试一下,第20行
回复 支持 反对

使用道具 举报

 楼主| 发表于 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 | 显示全部楼层
软串口不可以开这么高的波特率的,会有问题。这么高波特率只能用硬串口。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-22 13:56:59 | 显示全部楼层
弘毅 发表于 2017-3-22 12:44
软串口不可以开这么高的波特率的,会有问题。这么高波特率只能用硬串口。

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

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

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

这数据也是醉了。。。这不像是软件的问题。。。
回复 支持 反对

使用道具 举报

高级模式  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号  

GMT+8, 2017-6-27 01:11 , Processed in 0.047933 second(s), 11 queries , File On.

Powered by Discuz! X3.3 Licensed

© 2001-2017 Comsenz Inc.

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