#include <DHT.h> // biblioteca do sensor
#include <LiquidCrystal.h> // biblioteca do lcd
// Definindo consts para os pinos
const int DHTPIN = 1;
const int BUTTON = 9;
const int RELAY = 8;
const int LED_GREEN = 10;
const int LED_RED = 7;
const int LED_BLUE = 6;
// Inicializando o sensor DHT22
DHT dht(DHTPIN, DHT22);
// Inicializando o LCD
LiquidCrystal lcd(13, 12, 11, 5, 4, 3, 2);
// Variáveis globais
unsigned long previousMillis = 0;
const long interval = 2000; // Intervalo para ler o sensor
int buttonState = 0;
int lastButtonState = 0;
void setup() {
pinMode(BUTTON, INPUT);
pinMode(RELAY, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_RED, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
dht.begin();
lcd.begin(16, 2); // Ajuste para o tamanho do LCD
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
// Lendo a umidade
float h = dht.readHumidity();
// Verificando a umidade e acionando o ventilador e LEDs
if (h > 80) {
digitalWrite(RELAY, HIGH); // Ligar ventilador
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_RED, LOW);
digitalWrite(LED_BLUE, HIGH);
} else if (h < 50) {
digitalWrite(RELAY, LOW); // Desligar ventilador
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_RED, HIGH);
digitalWrite(LED_BLUE, LOW);
} else {
digitalWrite(RELAY, LOW); // Desligar ventilador
digitalWrite(LED_GREEN, HIGH);
digitalWrite(LED_RED, LOW);
digitalWrite(LED_BLUE, LOW);
}
// Atualizando o display LCD
lcd.setCursor(0, 0);
lcd.print("Umidade: ");
lcd.print(h);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("Ventilador: ");
lcd.print(digitalRead(RELAY) ? "Ligado" : "Desligado");
}
// Lendo o estado do botão
buttonState = digitalRead(BUTTON);
// Detectando a borda de subida do botão
if (buttonState == HIGH && lastButtonState == LOW) {
digitalWrite(RELAY, !digitalRead(RELAY)); // Inverte o estado do relay
}
lastButtonState = buttonState;
}