#include <DHTesp.h>
DHTesp dht;
// Pines del ejercicio
const int DHT_PIN = 4;
const int LED_TEMP = 14;
const int LED_HUM = 15;
const int BTN_UNO = 26;
const int BTN_DOS = 27;
// Anti-rebote
unsigned long lastBtnUno = 0;
unsigned long lastBtnDos = 0;
const unsigned long debounceDelay = 100;
// Temporizador lectura
unsigned long lastRead = 0;
// Estados LEDs
bool ledTempState = false;
bool ledHumState = false;
void setup() {
Serial.begin(115200);
// Inicializar DHT22
dht.setup(DHT_PIN, DHTesp::DHT22);
pinMode(LED_TEMP, OUTPUT);
pinMode(LED_HUM, OUTPUT);
pinMode(BTN_UNO, INPUT);
pinMode(BTN_DOS, INPUT_PULLUP);
digitalWrite(LED_TEMP, LOW);
digitalWrite(LED_HUM, LOW);
Serial.println("Sistema iniciado");
}
void loop() {
// -------- Lectura cada 1 segundo --------
if (millis() - lastRead >= 1000) {
lastRead = millis();
TempAndHumidity data = dht.getTempAndHumidity();
if (isnan(data.temperature) || isnan(data.humidity)) {
Serial.println("Error leyendo DHT22");
return;
}
float T = data.temperature;
float H = data.humidity;
Serial.printf("T = %.2f H = %.2f\n", T, H);
// -------- LED TEMPERATURA --------
if (T > 45.0)
ledTempState = true;
else
ledTempState = false;
digitalWrite(LED_TEMP, ledTempState);
// -------- LED HUMEDAD --------
if (H < 25.0 || H > 60.0)
ledHumState = true;
else
ledHumState = false;
digitalWrite(LED_HUM, ledHumState);
}
// -------- BOTÓN UNO (APAGAR LEDS) --------
if (digitalRead(BTN_UNO) == LOW && millis() - lastBtnUno > debounceDelay) {
lastBtnUno = millis();
ledTempState = false;
ledHumState = false;
digitalWrite(LED_TEMP, LOW);
digitalWrite(LED_HUM, LOW);
Serial.println("BTN_UNO → LEDs apagados");
}
// -------- BOTÓN DOS (APAGAR LEDS) --------
if (digitalRead(BTN_DOS) == LOW && millis() - lastBtnDos > debounceDelay) {
lastBtnDos = millis();
ledTempState = false;
ledHumState = false;
digitalWrite(LED_TEMP, LOW);
digitalWrite(LED_HUM, LOW);
Serial.println("BTN_DOS → LEDs apagados");
}
}