Code lcd i2c 16x2 with laser sensor pm2.5 pm3003

กระทู้คำถาม
//library จอ LCD
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2,3); // RX, TX
 int pm1 = 0;
 int pm2_5 = 0;
 int pm10 = 0;
void setup() {
 
  // initialize the LCD,
  lcd.begin(2, 16);
  lcd.backlight();
  lcd.clear();

  //  Print  a  message  to  the  LCD.

Serial.begin(9600);
while (!Serial) ;
mySerial.begin(9600);

Serial.print("****************** arduino ******************\n");
}
void loop() {
int index = 0;
float  value;
float  previousValue;
while (mySerial.available()) {
value = mySerial.read();
if ((index == 0 && value != 0x42) || (index == 1 && value != 0x4d)){
Serial.println("Cannot find the data header.");
break;
}
if (index == 4 || index == 6 || index == 8 || index == 10 || index == 12 || index == 14) {
previousValue = value;
}
else if (index == 5) {
pm1 = 256 * previousValue + value;
Serial.print("pm1: ");
Serial.print(pm1);
Serial.print(" ug/m3");
lcd.setCursor(0, 0);
lcd.print("PM ");
lcd.setCursor(2, 0);
lcd.print(" 1 ");
lcd.setCursor(3, 1);
lcd.print(pm1);
lcd.setCursor(6, 1);
lcd.print(" ");
}
else if (index == 7) {
pm2_5 = 256 * previousValue + value;
Serial.print("pm2.5: ");
Serial.print(pm2_5  );
Serial.print(" ug/m3");
lcd.setCursor(7, 0);
lcd.print("2.5 ");
lcd.setCursor(7, 1);
lcd.print(pm2_5  );
lcd.setCursor(10, 1);
lcd.print(" ");
}
else if (index == 9) {
pm10 = 256 * previousValue + value;
Serial.print("pm10:");
Serial.print(pm10  );
Serial.print(" ug/m3");
lcd.setCursor(12, 0);
lcd.print("10: ");
lcd.setCursor(13, 0);
lcd.print("0 ");
lcd.setCursor(12, 1);
lcd.print(pm10);
lcd.setCursor(15, 1);
lcd.print(" ");
}
else if (index > 15) {
break;
}
index++;
}
while(mySerial.available()) mySerial.read();
Serial.println("");
delay(1000);
}
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่