#include <DHT.h> // Incluye la librería necesaria para usar el sensor DHT
#define DHTPIN 5 // Define el pin GPIO 5 como el pin de datos del DHT22
#define DHTTYPE DHT22 // Define que se utilizará el sensor de tipo DHT22
DHT dht(DHTPIN, DHTTYPE); // Crea un objeto 'dht' usando el pin y tipo definidos
// Definición de pines de botones y LEDs
const int boton1 = 26; // Define el pin del botón 1 (GPIO 26)
const int boton2 = 27; // Define el pin del botón 2 (GPIO 27)
const int ledTemp = 14; // Define el pin del LED de temperatura (GPIO 14)
const int ledHum = 15; // Define el pin del LED de humedad (GPIO 15)
// Variables para controlar si las alertas están activas
bool TempActiva = false; // Estado de la alerta de temperatura (activa/inactiva)
bool HumActiva = false; // Estado de la alerta de humedad (activa/inactiva)
// Variables para saber si las alertas fueron apagadas manualmente con un botón
bool TempReseteada = false; // Indica si la alerta de temperatura fue apagada manualmente
bool HumReseteada = false; // Indica si la alerta de humedad fue apagada manualmente
void setup() {
Serial.begin(115200); // Inicia la comunicación por el monitor serial a 115200 baudios
dht.begin(); // Inicializa el sensor DHT22
// Configura los botones como entradas con resistencia pull-up interna
pinMode(boton1, INPUT_PULLUP); // Botón 1
pinMode(boton2, INPUT_PULLUP); // Botón 2
// Configura los LEDs como salidas
pinMode(ledTemp, OUTPUT); // LED de temperatura
pinMode(ledHum, OUTPUT); // LED de humedad
// Asegura que los LEDs estén apagados al iniciar
digitalWrite(ledTemp, LOW); // Apaga LED temperatura
digitalWrite(ledHum, LOW); // Apaga LED humedad
}
void loop() {
// Lee la temperatura y la humedad desde el sensor
float temp = dht.readTemperature(); // Lectura de temperatura en grados Celsius
float hum = dht.readHumidity(); // Lectura de humedad relativa en porcentaje
// Muestra los valores por el monitor serial
Serial.print("Temperatura: ");
Serial.print(temp); // Imprime temperatura
Serial.print(" °C | Humedad: ");
Serial.print(hum); // Imprime humedad
Serial.println(" %"); // Salto de línea
// Revisa si la temperatura supera los 45 °C y no ha sido reseteada manualmente
if (temp > 45.0 && !TempReseteada) {
TempActiva = true; // Activa la alerta de temperatura
Serial.println("Alarma de Temperatura Activada"); // Mensaje en el monitor serial
} else if (temp <= 45.0) {
TempActiva = false; // Apaga la alerta si vuelve al rango
TempReseteada = false; // Permite que se reactive si vuelve a subir
}
// Revisa si la humedad está fuera del rango 25 % - 60 % y no ha sido reseteada
if ((hum < 25.0 || hum > 60.0) && !HumReseteada) {
HumActiva = true; // Activa la alerta de humedad
Serial.println("Alarma de Humedad Activada"); // Mensaje en el monitor serial
} else if (hum >= 25.0 && hum <= 60.0) {
HumActiva = false; // Apaga la alerta si vuelve al rango
HumReseteada = false; // Permite que se reactive si vuelve a salirse del rango
}
// Enciende o apaga el LED de temperatura según el estado de la alerta
digitalWrite(ledTemp, TempActiva ? HIGH : LOW); // Enciende si la alerta está activa
// Enciende o apaga el LED de humedad según el estado de la alerta
digitalWrite(ledHum, HumActiva ? HIGH : LOW); // Enciende si la alerta está activa
// Si se presiona alguno de los botones, se apagan ambas alertas
if (digitalRead(boton1) == LOW || digitalRead(boton2) == LOW) {
TempActiva = false; // Desactiva la alerta de temperatura
TempReseteada = true; // Marca que fue apagada manualmente
HumActiva = false; // Desactiva la alerta de humedad
HumReseteada = true; // Marca que fue apagada manualmente
digitalWrite(ledTemp, LOW); // Apaga el LED de temperatura
digitalWrite(ledHum, LOW); // Apaga el LED de humedad
Serial.println("Alarma Desactivada"); // Mensaje en el monitor serial
}
delay(1000); // Espera 1 segundo antes de hacer una nueva lectura
}