蚁哥和你一起玩ARDUINO(37实用DIY:PM 2.5检测-软件代码)

接好线之后,如何写代码读PM2.5传感器数值呢?写代码之前,我们要缕清思路。认真的看懂数据协议,画出简单的流程图,这样能帮我们更好的设计组织代码。

几个关键:

1判断帧头;

2判断接收字节数;

3判断校验和;

4计算PM2.5数值。

根据上面的几点,我们可以画出读取传感器数值的流程图:

读取PM2.5传感器软件流程图

程序中,我们将用到两个关键函数,就是Serial.available()和Serial.read();其中Serial.available()是用来判断串口的接收缓存是否有数据,有数据就返回数据个数,没有就返回0;

Serial.read()是用来读取串口接收缓存数据的,返回一个字节数据,这里我们知道发送的是无符 16进制数,因此使用一个整形变量来接收。。

如果使用的软串口,把Serial换成自己声明的变量就可以了。

下面是读取传感器子函数的源代码:

float GetPM25Data()//读取PM2.5传感器

{

int cnt=0;//帧计数

int data=0;//接收字节

int revbuf[7];//接收缓存

int dsize=0;//串口接收计数

while (softSerial.available()>0){//软串口有效

data = softSerial.read(); //通过软串口读一个字节

dsize++;//读取字节计数

if(dsize>200)//没有遇到正确的帧标志,超时退出

{

return -1;

}

if(cnt==0)

{

if(data==0xAA)//得到帧头

{

revbuf[0] = data;

cnt++;

}

}else{

revbuf[cnt++]=data;

}

if(cnt==7)//帧计数

{

break;//退出循环

}

}

int sum=revbuf[1]+ revbuf[2]+ revbuf[3] + revbuf[4];//计算校验字

if(revbuf[5]==sum && revbuf[6]==0xff )//判断校验字和结束字

{

float vo=((revbuf[1]<<8)+revbuf[2])/1024.0*5.00;//计算PM2.5值

return vo*800; //返回PM2.5读数

}

return -1;//校验字或结束字错误

}

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年1月20日
下一篇 2018年1月20日

相关推荐