#include "DHT.h"
#include <LiquidCrystal_I2C.h>
#define DHTPIN 2 // DHT22 conectado al pin 2
#define DHTTYPE DHT22 // Tipo de sensor
#define LED_PIN 4 // LED en pin 4 (imitación de "ventana abierta")
#define GAS_SENSOR_PIN 14
#define GAS_ANALOG_PIN 34
#define LED_GAS 15
#define RAIN_PIN 32
#define LED_RAIN 5
#define WINDOW_SENSOR_PIN 27
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Iniciando...");
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW); // ventana cerrada
pinMode(GAS_SENSOR_PIN, INPUT);
pinMode(GAS_ANALOG_PIN, INPUT);
pinMode(LED_GAS, OUTPUT);
digitalWrite(LED_GAS, LOW);
pinMode(LED_RAIN, OUTPUT);
digitalWrite(LED_RAIN, LOW);
pinMode(WINDOW_SENSOR_PIN, INPUT_PULLUP);
dht.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Sistema IoT");
lcd.setCursor(0,1);
lcd.print("Iniciando...");
delay(1000);
lcd.clear();
}
void loop() {
// put your main code here, to run repeatedly:
delay(1000); // this speeds up the simulation
float temp = dht.readTemperature();
// int GAS_SENSOR = digitalRead(GAS_SENSOR_PIN);
int GAS_ANALOG =analogRead(GAS_ANALOG_PIN);
int RAIN = analogRead(RAIN_PIN);
int windowState = digitalRead(WINDOW_SENSOR_PIN);
// 0 = switch ON, 1 = switch OFF
// Verificación de lectura válida
if (isnan(temp)) {
lcd.setCursor(0,0);
lcd.print("Error DHT22");
return;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp: ");
lcd.print(temp);
lcd.print("C");
if (temp > 25.0) {
if (windowState == 1) {
digitalWrite(LED_PIN, HIGH); // LED encendido = ventana abierta
}
lcd.setCursor(0,1);
lcd.print("Ventana: ABRIR");
if(windowState == 1){
lcd.setCursor(0, 1);
lcd.print("ERROR: ventana no abre!");
}
} else {
if(windowState == 0){
digitalWrite(LED_PIN, LOW);
}
lcd.setCursor(0,1);
lcd.print("Ventana: CERRAR");
if(windowState == 0){
lcd.setCursor(0, 1);
lcd.print("ERROR: ventana no cierra!");
}
}
delay(2500);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("GAS: ");
lcd.print(GAS_ANALOG);
if(GAS_ANALOG > 1500){
digitalWrite(LED_GAS, HIGH);
lcd.setCursor(0,1);
lcd.print("ATTENCION! GAS!");
} else {
digitalWrite(LED_GAS, LOW);
lcd.setCursor(0,1);
lcd.print("Gas Normal");
}
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("RAIN: ");
lcd.print(RAIN);
if(RAIN > 1000){
digitalWrite(LED_RAIN, HIGH);
lcd.setCursor(0,1);
lcd.print("ESTA LLOVIENDO: CERRAR");
} else {
digitalWrite(LED_RAIN, LOW);
}
delay(1500);
}