#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
#include <SimpleDHT.h>
SoftwareSerial mySerial(2, 6); // Arudino Uno port RX, TX
// for DHT11,
// VCC: 5V or 3V
// GND: GND
// DATA: 7
int pinDHT11 = 7;
SimpleDHT11 dht11;
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
byte termometru[8] = //icon for termometer
{
B00100,
B01010,
B01010,
B01110,
B01110,
B11111,
B11111,
B01110
};
byte picatura[8] = //icon for water droplet
{
B00100,
B00100,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110,
};
byte pm2_5_img[8] = //icon for dust 2.5
{
B10101,
B01010,
B10101,
B01010,
B10101,
B01010,
B10101,
B01010,
};
byte pm10_img[8] = //icon for dust 2.5
{
B11011,
B11011,
B00000,
B11011,
B11011,
B00000,
B11011,
B11011,
};
#define DLY_5000 5000
#define DLY_1000 1000
unsigned char pms[32] = {0,};
void ClearPMS7003() {
char temp;
while (mySerial.available() ) { // While nothing is received
temp = mySerial.read();
}
delay(100);
}
void setup()
{
Serial.begin(9600);
Serial.println("start ");
mySerial.begin(9600);
#if 1
// initialize the LCD
lcd.begin();
// Turn on the blacklight and print a message.
lcd.backlight();
lcd.print("Hello, KitPlus!");
delay(1000);
lcd.clear();
//
lcd.load_custom_character(1, termometru);
lcd.load_custom_character(2, picatura);
lcd.load_custom_character(3, pm2_5_img);
lcd.load_custom_character(4, pm10_img);
#endif
// display string
lcd.setCursor(0, 0);
lcd.print("HOME");
lcd.setCursor(0, 1);
lcd.print("AIR");
// display icon
lcd.setCursor(7, 0);
lcd.write(1);
lcd.setCursor(7, 1);
lcd.write(2);
lcd.setCursor(12, 0);
lcd.write(3);
lcd.setCursor(12, 1);
lcd.write(4);
}
void loop()
{
static int cur_time = 0, pre_time = 0;
static int cur_time_1 = 0, pre_time_1 = 0;
cur_time = millis();
static byte temperature = 0;
static byte humidity = 0;
int chksum = 0, res = 0;;
int PM_01;
int PM_25;
int PM_10;
// Get DHT11 data from simpleDHT library
//==============================================================================
if (cur_time - pre_time >= DLY_5000) {
// Update previous counter time.
pre_time = cur_time;
// start working...
#if 0
Serial.println("=================================");
Serial.println("Sample DHT11...");
#endif
// read without samples.
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(pinDHT11, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
Serial.print("Read DHT11 failed, err=");
Serial.println(err);
temperature = 0;
humidity = 0;
}
#if 0
Serial.print("Sample OK: ");
Serial.print((int)temperature); Serial.print(" *C, ");
Serial.print((int)humidity); Serial.println(" H");
#endif
}
// Get PMS7003 Dust sensor data from sofewareserial
//==============================================================================
if (cur_time - pre_time_1 >= DLY_1000) {
// Update previous counter time.
pre_time_1 = cur_time;
if (mySerial.available() >= 32) {
for (int j = 0; j < 32 ; j++) {
pms[j] = mySerial.read();
if (j < 30)
chksum += pms[j];
}
if (pms[30] != (unsigned char)(chksum >> 8)
|| pms[31] != (unsigned char)(chksum) ) {
ClearPMS7003();
Serial.println("PMS7003 checksum fail");
} else if (pms[0] != 0x42 || pms[1] != 0x4d ) {
ClearPMS7003();
Serial.println("PMS7003 STX fail");
} else {
#if 1
Serial.print("Dust raw data debugging : ");
Serial.print("1.0ug/m3:");
Serial.print(pms[10]);
Serial.print(pms[11]);
Serial.print(" ");
Serial.print("2.5ug/m3:");
Serial.print(pms[12]);
Serial.print(pms[13]);
Serial.print(" ");
Serial.print("2.5ug/m3:");
Serial.print(pms[14]);
Serial.println(pms[15]);
#endif
PM_01 = (pms[10] << 8) | pms[11];
PM_25 = (pms[12] << 8) | pms[13];
PM_10 = (pms[14] << 8) | pms[15];
}
}
// display I2C 1602 LCD
//==============================================================================
#if 1
// value
lcd.setCursor(8, 0);
lcd.print(temperature);
lcd.setCursor(13, 0);
lcd.print(PM_25);
lcd.setCursor(8, 1);
lcd.print(humidity);
lcd.setCursor(13, 1);
lcd.print(PM_10);
#endif
}
but
no matching function for call to 'LiquidCrystal_I2C::begin()' ???
why error??