#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPin 18
#define DHTType DHT22
DHT dht(DHTPin, DHTType); //criação do objeto DHT
#define address 0x27
#define col 16
#define lin 2
LiquidCrystal_I2C lcd(address, col, lin); //criação do objeto lcd
float c, f, h; //variáveis para armazenar temperatura em Celsius, Fahrenheit e Umidade, respectivamente
byte grau[8] = {
B00000, // Primeiro byte do caractere personalizado
B01110, // Segundo byte do caractere personalizado
B01010, // Terceiro byte do caractere personalizado
B01110, // Quarto byte do caractere personalizado
B00000, // Quinto byte do caractere personalizado
B00000, // Sexto byte do caractere personalizado
B00000, // Sétimo byte do caractere personalizado
B00000 // Oitavo byte do caractere personalizado
};
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.createChar(0, grau);
dht.begin();
}
void leituraDHT(){
c = dht.readTemperature();
f = dht.readTemperature(true);
h = dht.readHumidity();
}
bool verificaErro(){
if(isnan(c) || isnan(f) || isnan(h))
{
lcd.clear();
lcd.print("Falha no sensor!");
delay(250);
return true;
}
else return false;
}
void printSerial(){
Serial.print("Temperatura em Celsius: ");
Serial.print(c);
Serial.print(" °C \nTemperatura em Fahrenheit: ");
Serial.print(f);
Serial.print(" °F \nUmidade: ");
Serial.println(h);
}
void printDisplay(){
lcd.clear();
lcd.print("Temp C: ");
lcd.print(c);
lcd.print(" ");
lcd.write(0);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("Temp F: ");
lcd.print(f);
lcd.print(" ");
lcd.write(0);
lcd.print("F");
delay(1000);
lcd.clear();
lcd.print(" Umidade:");
lcd.setCursor(5, 1);
lcd.print(h);
lcd.print("%");
delay(1000);
}
void loop() {
leituraDHT();
if(verificaErro()) return;
printSerial();
printDisplay();
}