//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);
}
Code lcd i2c 16x2 with laser sensor pm2.5 pm3003
#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);
}