“Sensor-Dust/zh”的版本间的差异
小 (Wasdpkj@hotmail.com moved page Microduino-Dust/zh to Sensor-Dust/zh) |
|||
第34行: | 第34行: | ||
*程序 | *程序 | ||
<source lang="cpp"> | <source lang="cpp"> | ||
+ | #include <SoftwareSerial.h> | ||
+ | SoftwareSerial pmSerial(4, 5); //PM2.5传感器通讯软串口 | ||
+ | #define INTERVAL_pm25 200 | ||
+ | unsigned long pm25_time = millis(); | ||
− | + | void setup() { | |
− | + | Serial.begin(9600); // See the connection status in Serial Monitor | |
− | + | pmSerial.begin(2400); //首先启动软串口 | |
+ | } | ||
− | + | void loop() { | |
− | + | if (pm25_time > millis()) pm25_time = millis(); | |
− | + | if (millis() - pm25_time > INTERVAL_pm25) { | |
− | + | Serial.println(PM25()) ; | |
− | + | pm25_time = millis(); //更新计时器 | |
− | + | } | |
− | + | } | |
− | + | float PM25() { | |
− | + | int data_s = 0; //串口接收数据 | |
− | + | int num = -1; //串口接收数据计数 | |
− | + | int sum = 0; //校验和 | |
− | + | int cal[5]; //接收数据缓存 | |
− | + | float dustDensity = 0; //PM2.5浓度 | |
− | + | pmSerial.listen(); | |
− | + | while (1) { | |
− | + | if (pmSerial.available() > 0) { //串口缓存有数据 | |
− | + | data_s = pmSerial.read(); //读取串口缓存数据 | |
− | + | if (data_s == 0xAA) { //得到数据帧起始位 | |
− | + | num = 0; //开始计数 | |
− | + | } | |
− | + | else if (num >= 0) { | |
− | + | cal[num++] = data_s; //读到数据,计数+1,数据保存到缓存中 | |
− | + | if (num == 6) { //读到数据帧最后一位 | |
− | + | sum = cal[0] + cal[1] + cal[2] + cal[3]; //计算校验和 | |
− | + | if (sum == cal[4] && cal[5] == 0xFF) { //校验和匹配,数据帧最后一位为0xFF,说明接收的数据帧正常 | |
− | + | dustDensity = (cal[0] * 256 + cal[1]) * (5.0 / 1024) * 550; //计算PM2.5浓度,单位ug/m3 | |
− | + | } | |
+ | else { //接收的数据不正常 | ||
+ | dustDensity = 0; //浓度清零 | ||
+ | } | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | pmSerial.stopListening(); | ||
+ | return dustDensity ; | ||
} | } | ||
</source> | </source> |
2016年3月29日 (二) 08:00的版本
Language | English |
---|
Microduino-Dust是PM2.5传感器模块。 特色
规格
文档开发适用于大气空气质量检测或室内烟尘检测等。 应用
#include <SoftwareSerial.h>
SoftwareSerial pmSerial(4, 5); //PM2.5传感器通讯软串口
#define INTERVAL_pm25 200
unsigned long pm25_time = millis();
void setup() {
Serial.begin(9600); // See the connection status in Serial Monitor
pmSerial.begin(2400); //首先启动软串口
}
void loop() {
if (pm25_time > millis()) pm25_time = millis();
if (millis() - pm25_time > INTERVAL_pm25) {
Serial.println(PM25()) ;
pm25_time = millis(); //更新计时器
}
}
float PM25() {
int data_s = 0; //串口接收数据
int num = -1; //串口接收数据计数
int sum = 0; //校验和
int cal[5]; //接收数据缓存
float dustDensity = 0; //PM2.5浓度
pmSerial.listen();
while (1) {
if (pmSerial.available() > 0) { //串口缓存有数据
data_s = pmSerial.read(); //读取串口缓存数据
if (data_s == 0xAA) { //得到数据帧起始位
num = 0; //开始计数
}
else if (num >= 0) {
cal[num++] = data_s; //读到数据,计数+1,数据保存到缓存中
if (num == 6) { //读到数据帧最后一位
sum = cal[0] + cal[1] + cal[2] + cal[3]; //计算校验和
if (sum == cal[4] && cal[5] == 0xFF) { //校验和匹配,数据帧最后一位为0xFF,说明接收的数据帧正常
dustDensity = (cal[0] * 256 + cal[1]) * (5.0 / 1024) * 550; //计算PM2.5浓度,单位ug/m3
}
else { //接收的数据不正常
dustDensity = 0; //浓度清零
}
break;
}
}
}
}
pmSerial.stopListening();
return dustDensity ;
}
购买历史图库
|