#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 20, 4);
byte x10[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07};
byte x11[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x1C};
byte x12[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1F};
byte x13[8] = {0x07, 0x07, 0x07, 0x07, 0x07, 0x1F, 0x1F, 0x1F};
byte x14[8] = {0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1F, 0x1F, 0x1F};
byte x15[8] = {0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C};
byte x16[8] = {0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07};
byte x17[8] = {0x1F, 0x1F, 0x1F, 0x07, 0x07, 0x07, 0x07, 0x07};
byte x18[8] = {0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00};
byte x19[8] = {0x1F, 0x1F, 0x1F, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C};
// byte x20[8] = {0x1F, 0x1F, 0x1F, 0x07, 0x07, 0x07, 0x07, 0x07};
void setup() {
lcd.init();
lcd.backlight();
dht.begin();
lcd.createChar(0, x10);
lcd.createChar(1, x11);
lcd.createChar(2, x12);
lcd.createChar(3, x13);
lcd.createChar(4, x14);
lcd.createChar(5, x15);
lcd.createChar(6, x16);
lcd.createChar(7, x17);
lcd.createChar(8, x18);
lcd.createChar(9, x19);
// lcd.createChar(10, x20);
}
void loop() {
float temperature = dht.readTemperature();
if (isnan(temperature)) {
lcd.setCursor(0, 0);
lcd.print("Error reading");
lcd.setCursor(0, 1);
lcd.print("sensor!");
return;
}
lcd.clear();
int tempInt = (int)temperature;
int tempDecimal = (int)((temperature - tempInt) * 10);
displayNumber(tempInt / 10, 0, 3);
displayNumber(tempInt % 10, 0, 7);
lcd.setCursor(11, 3);
lcd.write(byte(2));
displayNumber(tempDecimal, 0, 13);
lcd.setCursor(17, 1);
lcd.print("C");
delay(1000);
}
void displayNumber(int num, int r, int c) {
lcd.setCursor(c, r);
switch(num) {
case 0:
lcd.write(byte(9));
lcd.write(byte(8));
lcd.write(byte(7));
lcd.setCursor(c, r + 1);
lcd.write(byte(5));
lcd.print(" ");
lcd.write(byte(6));
lcd.setCursor(c, r + 2);
lcd.write(byte(5));
lcd.print(" ");
lcd.write(byte(6));
lcd.setCursor(c, r + 3);
lcd.write(byte(4));
lcd.write(byte(2));
lcd.write(byte(3));
break;
case 1:
lcd.write(byte(8));
lcd.write(byte(7));
// lcd.print(" ");
lcd.setCursor(c, r + 1);
lcd.print(" ");
lcd.write(byte(6));
// lcd.print(" ");
lcd.setCursor(c, r + 2);
lcd.print(" ");
lcd.write(byte(6));
// lcd.print(" ");
lcd.setCursor(c, r + 3);
lcd.write(byte(2));
lcd.write(byte(3));
lcd.write(byte(2));
break;
case 2:
lcd.write(byte(8));
lcd.write(byte(8));
lcd.write(byte(7));
lcd.setCursor(c, r + 1);
lcd.print(" ");
lcd.print(" ");
lcd.write(byte(6));
lcd.setCursor(c, r + 2);
lcd.write(byte(9));
lcd.write(byte(8));
lcd.write(byte(8));
lcd.setCursor(c, r + 3);
lcd.write(byte(4));
lcd.write(byte(2));
lcd.write(byte(2));
break;
case 3:
lcd.write(byte(8));
lcd.write(byte(8));
lcd.write(byte(7));
lcd.setCursor(c, r + 1);
lcd.write(byte(2));
lcd.write(byte(2));
lcd.write(byte(3));
lcd.setCursor(c, r + 2);
lcd.print(" ");
lcd.print(" ");
lcd.write(byte(6));
lcd.setCursor(c, r + 3);
lcd.write(byte(2));
lcd.write(byte(2));
lcd.write(byte(3));
break;
case 4:
lcd.write(byte(5));
lcd.print(" ");
lcd.write(byte(6));
lcd.setCursor(c, r + 1);
lcd.write(byte(4));
lcd.write(byte(2));
lcd.write(byte(3));
lcd.setCursor(c, r + 2);
lcd.print(" ");
lcd.print(" ");
lcd.write(byte(6));
lcd.setCursor(c, r + 3);
lcd.print(" ");
lcd.print(" ");
lcd.write(byte(6));
break;
case 5:
lcd.write(byte(9));
lcd.write(byte(8));
lcd.write(byte(8));
lcd.setCursor(c, r + 1);
lcd.write(byte(4));
lcd.write(byte(2));
lcd.write(byte(2));
lcd.setCursor(c, r + 2);
lcd.print(" ");
lcd.print(" ");
lcd.write(byte(6));
lcd.setCursor(c, r + 3);
lcd.write(byte(2));
lcd.write(byte(2));
lcd.write(byte(3));
break;
case 6:
lcd.write(byte(9));
lcd.write(byte(8));
lcd.write(byte(8));
lcd.setCursor(c, r + 1);
lcd.write(byte(5));
lcd.print(" ");
lcd.print(" ");
lcd.setCursor(c, r + 2);
lcd.write(byte(9));
lcd.write(byte(8));
lcd.write(byte(7));
lcd.setCursor(c, r + 3);
lcd.write(byte(4));
lcd.write(byte(2));
lcd.write(byte(3));
break;
case 7:
lcd.write(byte(8));
lcd.write(byte(8));
lcd.write(byte(7));
lcd.setCursor(c, r + 1);
lcd.print(" ");
lcd.print(" ");
lcd.write(byte(6));
lcd.setCursor(c, r + 2);
lcd.print(" ");
lcd.print(" ");
lcd.write(byte(6));
lcd.setCursor(c, r + 3);
lcd.print(" ");
lcd.print(" ");
lcd.write(byte(6));
break;
case 8:
lcd.write(byte(9));
lcd.write(byte(8));
lcd.write(byte(7));
lcd.setCursor(c, r + 1);
lcd.write(byte(4));
lcd.write(byte(2));
lcd.write(byte(3));
lcd.setCursor(c, r + 2);
lcd.write(byte(5));
lcd.print(" ");
lcd.write(byte(6));
lcd.setCursor(c, r + 3);
lcd.write(byte(4));
lcd.write(byte(2));
lcd.write(byte(3));
break;
case 9:
lcd.write(byte(9));
lcd.write(byte(8));
lcd.write(byte(7));
lcd.setCursor(c, r + 1);
lcd.write(byte(5));
lcd.print(" ");
lcd.write(byte(6));
lcd.setCursor(c, r + 2);
lcd.write(byte(8));
lcd.write(byte(8));
lcd.write(byte(7));
lcd.setCursor(c, r + 3);
lcd.write(byte(2));
lcd.write(byte(2));
lcd.write(byte(3));
break;
case 11:
lcd.setCursor(c, r + 1);
lcd.write(byte(7));
lcd.setCursor(c, r + 2);
lcd.write(byte(7));
break;
}
}