//chatGPT 3.5 / Francisco Rodriguez
#include <Wire.h>
#include <DHTesp.h>
#include <LiquidCrystal_I2C.h>
// Definición de los pines y los tipos de sensores utilizados
#define DHTPIN 15
#define DHTTYPE DHT22
DHTesp dht;
LiquidCrystal_I2C lcd(0x27, 20, 4);
const int backlightPin = 2;
// Variables para almacenar los valores de temperatura y humedad
float temp = 0, hum = 0;
bool tempChanged = true, humChanged = true;
// Rangos para la temperatura y la humedad
const int tempMin = 18, tempMax = 25, humMin = 40, humMax = 60;
// Configuración inicial del hardware
void setup() {
dht.setup(DHTPIN, DHTesp::DHT22);
lcd.init();
lcd.backlight();
pinMode(backlightPin, OUTPUT);
}
// Bucle principal del programa
void loop() {
// Leer los valores de temperatura y humedad del sensor DHT22
float newTemp = dht.getTemperature(), newHum = dht.getHumidity();
// Comprobar si los valores son válidos
if (isnan(newTemp) || isnan(newHum)) return;
// Comprobar si los valores han cambiado desde la última lectura
if (newTemp != temp) tempChanged = true, temp = newTemp;
if (newHum != hum) humChanged = true, hum = newHum;
// Actualizar la pantalla y la retroiluminación si los valores han cambiado
if (tempChanged || humChanged) updateDisplay(), updateBacklight(), tempChanged = humChanged = false;
// Esperar 2 segundos antes de leer los valores nuevamente
delay(2000);
}
// Función para actualizar la pantalla LCD con los valores de temperatura y humedad
void updateDisplay() {
lcd.setCursor(0, 0);
lcd.print(F("TEMP: "));
lcd.print(temp);
lcd.write((byte)0xDF);
lcd.print(F("C "));
lcd.print(temp >= tempMin && temp <= tempMax ? F("OK ") : F("F/R"));
lcd.setCursor(0, 1);
lcd.print(F("HUME: "));
lcd.print(hum);
lcd.print(F(" % "));
lcd.print(hum >= humMin && hum <= humMax ? F("OK ") : F("F/R"));
}
// Función para actualizar la retroiluminación de la pantalla LCD en función de los rangos de temperatura y humedad
void updateBacklight() {
bool tempInRange = (temp >= tempMin && temp <= tempMax), humInRange = (hum >= humMin && hum <= humMax);
digitalWrite(backlightPin, tempInRange && humInRange ? LOW : HIGH);
lcd.setBacklight(tempInRange && humInRange ? LOW : HIGH);
}