#include <LiquidCrystal.h>
#define MESOPHILIE
//#define THERMOPHILIE
LiquidCrystal lcd{12 ,11 ,6 ,5 ,4 ,3};
//Counter to change positions of pages
#include <DHT22.h>
//define pin data
#define pinDATA 7 // SDA, or almost any other I/O pin
DHT22 dht22(pinDATA);
// Initialize DHT sensor for normal 16mhz Arduino
// Define Variables
float hum; //Stores humidity value
float temp; //Stores temperature value
int x = 0;
int y = 0;
byte customChar0[] = {
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B00000
};
byte customChar1[] = {
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B11111,
B11111
};
byte customChar2[] = {
B00000,
B00000,
B00000,
B00000,
B11111,
B11111,
B11111,
B11111
};
byte customChar3[] = {
B00000,
B00000,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111
};
byte customChar4[] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111
};
byte customChar5[] = {
B00100,
B00100,
B01110,
B01110,
B11111,
B11111,
B01110,
B00100
};
byte cloch[] = {
B00100,
B01110,
B01110,
B01110,
B11111,
B00000,
B00100,
B00000
};
byte done[] = {
B00000,
B00001,
B10011,
B10111,
B11110,
B11100,
B11000,
B10000
};
byte degree[] = {
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
B00000
};
int page_counter=1 ; //To move beetwen pages
//Variables for auto scroll
unsigned long previousMillis = 0;
//---Pins-----//
int up = 2; //Up button
int down = 10; //Down button
//---------Storage debounce function-----//
boolean current_up = LOW;
boolean last_up=LOW;
boolean last_down = LOW;
boolean current_down = LOW;
void setup() {
lcd.begin(16,2);
Serial.begin(115200);
lcd.createChar(0,customChar0);
lcd.createChar(1,customChar1);
lcd.createChar(2,customChar2);
lcd.createChar(3,customChar3);
lcd.createChar(4,customChar4);
lcd.createChar(5,cloch);
lcd.createChar(6,done);
lcd.createChar(7,degree);
}
//---- De-bouncing function for all buttons----//
boolean debounce(boolean last, int pin)
{
boolean current = digitalRead(pin);
if (last != current)
{
delay(5);
current = digitalRead(pin);
}
return current;
}
void loop() {
current_up = debounce(last_up, up); //Debounce for Up button
current_down = debounce(last_down, down); //Debounce for Down button
//----Page counter function to move pages----//
//Page Up
if (last_up== LOW && current_up == HIGH){
lcd.clear(); //When page is changed, lcd clear to print new page
if(page_counter <3){ //Page counter never higher than 3(total of pages)
page_counter= page_counter +1; //Page up
}
else{
page_counter= 1; //return to page 1
}
}
last_up = current_up;
//Page Down
if (last_down== LOW && current_down == HIGH){
lcd.clear(); //When page is changed, lcd clear to print new page
if(page_counter >1){ //Page counter never lower than 1 (total of pages)
page_counter= page_counter -1; //Page down
}
else{
page_counter= 3; //return to page 3
}
}
last_down = current_down;
//------- Switch function to write and show what you want---//
switch (page_counter) {
case 1:{ //Design of home page 1
float h = dht22.getHumidity();
float t = dht22.getTemperature();
lcd.setCursor(1,0);
lcd.print(" temp / hum");
lcd.setCursor(0,1);
#ifdef MESOPHILIE
if(t >= 50) lcd.print("Optimal");
else lcd.print("!!!");
#endif
#ifdef THERMOOPHILIE
if(t >= 50 && t <= 55) lcd.print("Optimal");
else lcd.print("!!!");
#endif
lcd.setCursor(9,1);
if(h >= 50 && h <= 80) lcd.print("Optimal");
else lcd.print("!!!");
}
break;
case 2: { //Design of page 2
lcd.setCursor(15,1);
lcd.print("%");
lcd.setCursor(1,1);
lcd.print(" H >");
lcd.setCursor(4,0);
lcd.print(" Humidite ");
float h = dht22.getHumidity();
if (dht22.getLastError() != dht22.OK) {
Serial.print("last error :");
Serial.println(dht22.getLastError());
}
Serial.print("h=");Serial.println(h,1);;
lcd.setCursor(10,1);
lcd.print(h,1);
if(h < 1)
{
// lcd.setCursor(1,1);
// lcd.print("Vide");
}
else if(h > 1 && h <= 25)
{
// lcd.setCursor(1,1);
// lcd.print(" ");
// lcd.setCursor(15,1);
// lcd.print(" ");
lcd.setCursor(6,1);
lcd.write(byte(1));
lcd.setCursor(7,1);
lcd.write(byte(0));
lcd.setCursor(8,1);
lcd.write(byte(0));
lcd.setCursor(9,1);
lcd.write(byte(0));
}
else if(h >25 && h <= 50)
{
// lcd.setCursor(1,1);
// lcd.print(" ");
// lcd.setCursor(15,1);
// lcd.print(" ");
lcd.setCursor(6,1);
lcd.write(byte(1));
lcd.setCursor(7,1);
lcd.write(byte(2));
lcd.setCursor(8,1);
lcd.write(byte(0));
lcd.setCursor(9,1);
lcd.write(byte(0));
}
else if(h > 50 && h <= 75)
{
// lcd.setCursor(1,1);
// lcd.print(" ");
// lcd.setCursor(15,1);
// lcd.print(" ");
lcd.setCursor(6,1);
lcd.write(byte(1));
lcd.setCursor(7,1);
lcd.write(byte(2));
lcd.setCursor(8,1);
lcd.write(byte(3));
lcd.setCursor(9,1);
lcd.write(byte(0));
}
else if(h >75 && h <= 99)
{
// lcd.setCursor(1,1);
// lcd.print(" ");
// lcd.setCursor(15,1);
// lcd.print(" ");
lcd.setCursor(6,1);
lcd.write(byte(1));
lcd.setCursor(7,1);
lcd.write(byte(2));
lcd.setCursor(8,1);
lcd.write(byte(3));
lcd.setCursor(9,1);
lcd.write(byte(4));
}
else {
}
delay(180); //Collecting period should be : >1.7 second
}
break;
case 3: { //Design of page 3
lcd.setCursor(14,1);
lcd.write(byte(7));
lcd.setCursor(15,1);
lcd.print("C");
lcd.setCursor(1,1);
lcd.print(" T >");
lcd.setCursor(2,0);
lcd.print("Tamperature");
float t = dht22.getTemperature();
lcd.setCursor(10,1);
lcd.print(t,1);
Serial.print("t=");Serial.println(t,1);
if(t < 1)
{
// lcd.setCursor(1,1);
// lcd.print("Vide");
}
else if(t > 1 && t <= 25)
{
// lcd.setCursor(1,1);
// lcd.print(" ");
// lcd.setCursor(15,1);
// lcd.print(" ");
lcd.setCursor(6,1);
lcd.write(byte(1));
lcd.setCursor(7,1);
lcd.write(byte(0));
lcd.setCursor(8,1);
lcd.write(byte(0));
lcd.setCursor(9,1);
lcd.write(byte(0));
}
else if(t >25 && t <= 50)
{
// lcd.setCursor(1,1);
// lcd.print(" ");
// lcd.setCursor(15,1);
// lcd.print(" ");
lcd.setCursor(6,1);
lcd.write(byte(1));
lcd.setCursor(7,1);
lcd.write(byte(2));
lcd.setCursor(8,1);
lcd.write(byte(0));
lcd.setCursor(9,1);
lcd.write(byte(0));
}
else if(t > 50 && t <= 75)
{
// lcd.setCursor(1,1);
// lcd.print(" ");
// lcd.setCursor(15,1);
// lcd.print(" ");
lcd.setCursor(6,1);
lcd.write(byte(1));
lcd.setCursor(7,1);
lcd.write(byte(2));
lcd.setCursor(8,1);
lcd.write(byte(3));
lcd.setCursor(9,1);
lcd.write(byte(0));
}
else if(t >75 && t <= 99)
{
// lcd.setCursor(1,1);
// lcd.print(" ");
// lcd.setCursor(15,1);
// lcd.print(" ");
lcd.setCursor(6,1);
lcd.write(byte(1));
lcd.setCursor(7,1);
lcd.write(byte(2));
lcd.setCursor(8,1);
lcd.write(byte(3));
lcd.setCursor(9,1);
lcd.write(byte(4));
}
else {
// lcd.setCursor(1,1);
// lcd.print("Full ");
}
}
break;
}//switch end
}//loop end