#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <RTClib.h>
#define DHTPIN 15 // Pin de datos del sensor DHT22
#define DHTTYPE DHT22 // Tipo de sensor DHT
const int switch1 = 18;
const int switch2 = 19;
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C 0x27, Pantalla 16x2
RTC_DS1307 rtc;
const int pirPin = 2; // Pin de salida del sensor PIR
float temperatura;
float humedad;
DateTime now;
void setup() {
lcd.init();
lcd.backlight();
lcd.clear();
lcd.print("Hola");
Serial.begin(115200);
dht.begin();
pinMode(pirPin, INPUT);
pinMode(switch1, INPUT);
pinMode(switch2, INPUT);
if (!rtc.begin()) {
Serial.println("No se pudo encontrar el RTC");
while (1);
}
if (!rtc.isrunning()) {
Serial.println("El RTC no está funcionando, se establecerá la hora!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void mostrarMensaje(String linea1, String linea2) {
lcd.clear();
lcd.setCursor(3, 0);
lcd.print(linea1);
lcd.setCursor(3, 1);
lcd.print(linea2);
}
bool detectarPresencia() {
return digitalRead(pirPin) == HIGH;
}
void loop() {
int entradaA = digitalRead(switch1);
int entradaB = digitalRead(switch2);
Serial.print("Switch 1: "); Serial.println(switch1); Serial.print("Switch 2: "); Serial.println(switch2);
int mux1 = ((entradaA) <<= 1) + entradaB;
Serial.print("Canal Seleccionado: "); Serial.println(mux1);
switch (mux1){
case 0:
//Mostrar matrícula y nombre centrado en la pantalla
mostrarMensaje("A01025119", "Do Kyu");
delay(1000);
break;
case 1:
//Mostrar humedad y temperatura en la pantalla
humedad = dht.readHumidity();
temperatura = dht.readTemperature();
mostrarMensaje("H:" + String(humedad) + "%", "T:" + String(temperatura) + "C");
delay(1000);
break;
case 2:
//Mostrar presencia en la pantalla
if (detectarPresencia()) {
mostrarMensaje("Presencia", "Detectada");
} else {
mostrarMensaje("Sin", "Presencia");
}
delay(1000);
break;
case 3:
//Mostrar datos del sensor RTC
now = rtc.now();
mostrarMensaje("Fecha:", String(now.month()) + "/" + String(now.day()) + "/" + String(now.year()));
Serial.print("Fecha y hora: ");
Serial.print(now.day());
Serial.print('/');
Serial.print(now.month());
Serial.print('/');
Serial.print(now.year());
Serial.print(' ');
Serial.print(now.hour());
Serial.print(':');
Serial.print(now.minute());
Serial.print(':');
Serial.println(now.second());
delay(1000);
break;
default:
Serial.print("Mueva los switches");
delay(1000);
break;
}
delay(1000);
}