Arduino-汉王PM2.5检测模组B1

汉王PM2.5检测模组B1,接入Arduino,使用I2C1602显示屏显示

 1 #include <Arduino.h>
 2 #include <Wire.h> 
 3 #include <LiquidCrystal_I2C.h>
 4 float pm25 = 0;
 5 #define DATALEN 7
 6 LiquidCrystal_I2C lcd(0x3F,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display
 7 void setup() {
 8   // put your setup code here, to run once:
 9   Serial.begin(115200);
10   lcd.init();                      // initialize the lcd
11 
12   // Print a message to the LCD.
13   lcd.backlight();
14   lcd.print("PM2.5");
15   
16 }
17 void ProcessSerialData()//读取PM2.5的数据。
18 {
19   uint8_t mData = 0;
20   uint8_t i = 0;
21   uint8_t mPkt[DATALEN] = {0};
22   int mCheck = 0;
23   while (Serial.available() > 0) 
24   {  
25     mData = Serial.read();     
26     delay(2);//wait until packet is received
27     if(mData == 0xAA)//head1 ok
28      {
29         mPkt[0] =  mData;
30         mData = Serial.read();
31         {
32           for(int i=1;i < DATALEN;i++)//data recv and crc calc
33           {
34             mPkt[i] = Serial.read();
35             Serial.print(mPkt[i],HEX);
36            Serial.print("---");
37              delay(2);
38           }
39           delay(1);
40           Serial.println();
41     //      Serial.println(mPkt[3]*256+mPkt[2]);
42  //         Serial.print(mPkt[2]);
43 //          Serial.println("    ");
44  //         Serial.print("---");
45 //          Serial.print(mPkt[5]);
46           if(mPkt[DATALEN-1] == 0xFF)
47           {
48             pm25 = (mPkt[1]<<8)|mPkt[4];
49              Serial.println(float(pm25/100));
50              lcd.setCursor(0,1);
51              lcd.print(float(pm25/100));
52             Serial.flush();
53             return;
54           }
55         }      
56      }
57    } 
58 }
59 
60 void loop() {
61   ProcessSerialData();
62 }

原文地址:https://www.cnblogs.com/nightnine/p/8538717.html