/* Hello Wokwi! */
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 20, 4);
int Interval = 500;
int Comprimento = 1;
void setup() {
// Sensor
Serial.begin(115200);
Serial.println(F("DHT22 example!"));
dht.begin();
}
void temperatura(float T){
// condições para cada faixa de temperatura
if (T <= 26.6){
lcd.setCursor(0, 0);
lcd.print(("Alerta: Temperatura Baixa!!"));
return;
}
else if (T > 26.6 && T < 37.08){
lcd.setCursor(0, 0);
lcd.print(("Temperatura: dentro do esperado"));
return;
}
else if (T >= 37.08 && T < 37.8) {
lcd.setCursor(0, 0);
lcd.print(("Temperatura alta: abrir 50% das janelas laterais"));
return;
}
else if (T >= 37.8 && T < 39.6) {
lcd.setCursor(0, 0);
lcd.print(("Temperatura alta: abrir 50% das janelas laterais"));
return;
}
else if (T >= 39.6) {
lcd.setCursor(0, 0);
lcd.print(("Temperatura alta: abrir 50% das janelas laterais"));
return;
}
else {
lcd.setCursor(0, 0);
lcd.print(("Erro na leitura"));
return;
}
}
void umidade(float U){
// condições para cada faixa de umidade
if (U <= 73.5){
lcd.setCursor(0, 0);
lcd.print(("Alerta:"));
lcd.setCursor(0, 1);
lcd.print(("Umidade BAIXA"));
return;
}
else if (U > 73.5 && U < 114.7){
lcd.setCursor(0, 0);
lcd.print(("Umi dentro do"));
lcd.setCursor(0, 1);
lcd.print(("esperado"));
return;
}
else if (U >= 114.7){
lcd.setCursor(0, 0);
lcd.print(("Alerta:"));
lcd.setCursor(0, 1);
lcd.print(("Umidade ALTA"));
return;
}
}
void loop() {
// Sensor //
//aqui dá pra trocar e testar com outros valores
float T = dht.readTemperature();
float U = dht.readHumidity();
// // Check if any reads failed and exit early (to try again).
// if (isnan(T) || isnan(U)) {
// Serial.println(F("Failed to read from DHT sensor!"));
// return;
// }
// //aqui printa os dados no console
// Serial.print(("Humidity: "));
// Serial.print(U);
// Serial.print(("% T: "));
// Serial.print(T);
// Serial.println(("°C "));
//MOSTRA NO DISPLAY
lcd.init();
lcd.backlight();
lcd.setCursor(1, 0);
lcd.print("Hora: 16:20"); //horário fictício, terá que puxar de algum lugar
lcd.setCursor(0, 1);
lcd.print(("T:"));
lcd.print(T);
// lcd.println(F("°C "));
lcd.print(("\nUR:"));
lcd.print(U);
// lcd.println(F("%"));
delay(3000);
lcd.clear();
temperatura(T);
for (int positionCounter = 0; positionCounter < Comprimento; positionCounter++) {
lcd.scrollDisplayLeft();
delay(Interval);
delay(3000);
lcd.clear();
umidade(U);
delay(6000); //ver como setar o intervalo entre as medições
//aplicando tanto para a medição quanto para o display, como separar????
}