Arduino编程时,读取pm2.5传感器时,串口打印数据不正常,用millis()函数定时和delay()函数延时打印出来的串口数据不同:
不正常的代码:
#include <SoftwareSerial.h>
SoftwareSerial PMSerial(7, 8); // 声明另一个软串口对象,RX接6,TX接5
//pm2.5
byte PMbuf[] = {0,0,0,0};
long ltime = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); // 初始化硬串口
PMSerial.begin(9600); // 初始化PM2.5模块的软串口
// ZigbeeSerial.begin(9600);
// dht13.begin();
// pinMode(yw_get, INPUT);
}
void loop() {
if (PMSerial.available() > 0) {
for (int i = 0; i < 4; i = i + (1)) {
PMbuf[i] = PMSerial.read();
}
PM = ((PMbuf[1] & 0x7F) * 128 + (PMbuf[2]) & 0x7F) * 0.4;
}
if (millis() - ltime >= 3000) {
ltime = millis();
for (int i = 0; i < 4; i = i + (1)) {
Serial.println(PMbuf[i]);
}
Serial.print("PM2.5: ");
Serial.println(PM);
}
// delay(3000);
}
正常的代码:
#include <SoftwareSerial.h>
SoftwareSerial PMSerial(7, 8); // 声明另一个软串口对象,RX接6,TX接5
//pm2.5
byte PMbuf[] = {0,0,0,0};
long ltime = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); // 初始化硬串口
PMSerial.begin(9600); // 初始化PM2.5模块的软串口
// ZigbeeSerial.begin(9600);
// dht13.begin();
// pinMode(yw_get, INPUT);
}
void loop() {
if (PMSerial.available() > 0) {
for (int i = 0; i < 4; i = i + (1)) {
PMbuf[i] = PMSerial.read();
}
PM = ((PMbuf[1] & 0x7F) * 128 + (PMbuf[2]) & 0x7F) * 0.4;
}
// if (millis() - ltime >= 3000) {
// ltime = millis();
for (int i = 0; i < 4; i = i + (1)) {
Serial.println(PMbuf[i]);
}
Serial.print("PM2.5: ");
Serial.println(PM);
//}
delay(3000);
传感器是固定每一秒发送一次串口数据,A5是识别码,中间两位是数据值,最后一位是校验位