#include <Wire.h>                    
#include <LiquidCrystal_I2C.h>        
#include <DHT.h>
#include <DHT_U.h>
#define DHTTYPE DHT22
#define DHTPIN 2
DHT_Unified dht(DHTPIN, DHTTYPE);
uint32_t delayMS; 
LiquidCrystal_I2C lcd(0x27, 16, 2);  // Configura endereço I2C e display com 16 caracteres e 2 linhas 
void setup()
{
  dht.begin();
  sensor_t sensor;
  dht.temperature().getSensor(&sensor);
  dht.humidity().getSensor(&sensor);
  delayMS = sensor.min_delay / 1000;
  lcd.init();                      // inicializa LCD
  lcd.clear();                     //limpa a tela
  lcd.backlight();                 // ativa led de backlight
}
void loop()
{
   
  delay(delayMS);                               // atraso entre as medições
  sensors_event_t event;                        // inicializa o evento da Temperatura
  dht.temperature().getEvent(&event);           // faz a leitura da Temperatura
  if (isnan(event.temperature))                 // se algum erro na leitura
  {
    lcd.setCursor(0,0);
    lcd.print("Erro na leitura");
    lcd.setCursor(0,1);
    lcd.print("Da Temperatura!");
    delay(3000);
    lcd.clear();
  }
  else if (event.temperature<10)                                          
  {
    lcd.setCursor(0,0);
    lcd.print("Temp: ");
    lcd.print(event.temperature);
    lcd.print(" *C");
    lcd.setCursor(0,1);
    lcd.print("Temp. Baixa!");
    delay(3000);
    lcd.clear();
  }
  else if (event.temperature>16)                                          
  {
    lcd.setCursor(0,0);
    lcd.print("Temp: ");
    lcd.print(event.temperature);
    lcd.print(" *C");
    lcd.setCursor(0,1);
    lcd.print("Temp. Alta!");
    delay(3000);
    lcd.clear();
  }
  else                                          
  {
    lcd.setCursor(0,0);
    lcd.print("Temp: ");
    lcd.print(event.temperature);
    lcd.print(" *C");
    lcd.setCursor(0,1);
    lcd.print("Temp. BOA!");
    delay(3000);
    lcd.clear();
  }
dht.humidity().getEvent(&event);              
  if (isnan(event.relative_humidity))          
  {
    lcd.setCursor(0,0);
    lcd.print("Erro na leitura");
    lcd.setCursor(0,1);
    lcd.print("Da Umidade!");
    delay(3000);
    lcd.clear();
  }
  else if (event.relative_humidity<60)                                         
  {
    lcd.setCursor(0,0);
    lcd.print("Umidade: ");
    lcd.print(event.relative_humidity);
    lcd.print("%");
    lcd.setCursor(0,1);
    lcd.print("Umidade Baixa!");
    delay(3000);
    lcd.clear();
  }
  else if (event.relative_humidity>80)                                         
  {
    lcd.setCursor(0,0);
    lcd.print("Umidade: ");
    lcd.print(event.relative_humidity);
    lcd.print("%");
    lcd.setCursor(0,1);
    lcd.print("Umidade Alta!");
    delay(3000);
    lcd.clear();
  }
  else                                          
  {
    lcd.setCursor(0,0);
    lcd.print("Umidade: ");
    lcd.print(event.relative_humidity);
    lcd.print("%");
    lcd.setCursor(0,1);
    lcd.print("Umidade BOA!");
    delay(3000);
    lcd.clear();
  }
  
}