#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Configuración del sensor DHT
#define DHTPIN 2 // Pin donde está conectado el sensor
#define DHTTYPE DHT22 // DHT 22 (AM2301)
// Inicializar el objeto DHT
DHT dht(DHTPIN, DHTTYPE);
// Inicializar el LCD con la dirección I2C
LiquidCrystal_I2C lcd(0x27, 20, 4); // Dirección 0x27, display 20x4
int pinled1 = 12; // red pinled 1 is connect to pin 12 in arduino
int pinled2 = 11; // yellow pinled 2 is connect to pin 11 in arduino
int pinled3 = 10; // green pinled 3 is connect to pin 10 in arduino
int sw1 = 6; // Pin para la llave 1
int sw2 = 7; // Pin para la llave 2
int estado, estadoAnt = 0;
int estadoLlave1, estadoLlave2;
unsigned long timeDHT, timeDelay;
void setup() {
// Iniciar el display LCD con 20 columnas, 4 filas
lcd.begin(20, 4);
lcd.backlight();
// Iniciar el sensor DHT
dht.begin();
Serial.begin(9600);
// Configurar los pines de las llaves como entrada
pinMode(sw1, INPUT_PULLUP); // Usar resistencia pull-up interna
pinMode(sw2, INPUT_PULLUP); // Usar resistencia pull-up interna
// Mensaje inicial
lcd.setCursor(0, 0);
lcd.print("Temp y Humedad:");
estado = 255;
estadoAnt = estado;
}
void loop() {
char buffer[20], str[6];
// Esperar 2 segundos antes de la siguiente lectura
if (millis() - timeDHT > 2000UL) {
// Leer la humedad y la temperatura
float humedad = dht.readHumidity();
float temperatura = dht.readTemperature();
// Revisar si la lectura es correcta
if (isnan(humedad) || isnan(temperatura)) {
lcd.setCursor(0, 1);
lcd.print("Error al leer DHT!");
return;
}
lcd.setCursor(0, 1);
dtostrf(temperatura, 4,1, str);
sprintf(buffer, "Temp: %s", str);
lcd.print(buffer);
Serial.println(buffer);
lcd.setCursor(0, 2);
dtostrf(humedad, 4, 1, str);
sprintf(buffer, "Hum : %s", str);
lcd.print(buffer);
Serial.println(buffer);
timeDHT = millis();
}
// Leer el estado de las llaves
estadoLlave1 = digitalRead(sw1); // switch 1 read the digital logic 1 or 0
estadoLlave2 = digitalRead(sw2); // switch 2 read the digital logic 1 or 0
// Mostrar el estado de las llaves en la última línea
estado = estadoLlave2 << 1 | estadoLlave1;
if (estado != estadoAnt) {
Serial.println("Estado1: " + String(estadoLlave1));
Serial.println("Estado2: " + String(estadoLlave2));
Serial.println("Estado : " + String(estado));
}
estadoAnt = estado;
lcd.setCursor(0, 3);
switch (estado) {
case 0:
lcd.print("MODO: APAGADO ");
break;
case 1:
lcd.print("MODO: VEGETACION");
break;
case 2:
lcd.print("MODO: FLORACION ");
break;
}
}