#include <LiquidCrystal_I2C.h>
#include "DHTesp.h"
#include "RTClib.h"
const int DHT_PIN = 27;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
// Creación de un objeto LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Creación de un objeto DHT
DHTesp dhtSensor;
// Creación de un objeto RTC
RTC_DS1307 rtc;
void setup() {
// Iniciamos el RTC
Serial.begin(115200);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
// Se inicia el DHT
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
// Se inicia el LCD
lcd.init();
// Se prende la retroalimentación
lcd.backlight();
// Se declara nombre y matrícula
String matricula = "A01658666";
String nombre = "Diego Lopez Soto";
// Se centra el nombre y la matrícula en el LCD
int centradoMatricula = (16 - matricula.length()) / 2;
int centradoNombre = (16 - nombre.length()) / 2;
// Se muestra el nombre y la matrícula
lcd.setCursor(centradoNombre, 0);
lcd.print(nombre);
lcd.setCursor(centradoMatricula, 1);
lcd.print(matricula);
// Esperar algunos segundos antes de la próxima lectura
delay(3000);
// Borrar el contenido del lcd
lcd.clear();
}
void loop() {
// Se actualiza la pantalla cada 5 segundos, alternando entre mostrar la temperatura/humedad y la hora
static unsigned long lastUpdate = 0;
unsigned long currentMillis = millis();
// Si ha pasado más de 5 segundos desde la última vez que se actualizó la pantalla, entonces se va intercalando la lectura de humedad y temperatura
if (currentMillis - lastUpdate > 5000) {
lastUpdate = currentMillis;
static int displayState = 0;
switch (displayState) {
case 0:
displayTemperatureAndHumidity();
break;
case 1:
displayTime();
break;
}
displayState = (displayState + 1) % 2;
}
}
void displayTemperatureAndHumidity() {
// Borrar el contenido del lcd
lcd.clear();
// Obtener datos de temperatura y humedad
TempAndHumidity data = dhtSensor.getTempAndHumidity();
// Comprobar si los datos son válidos antes de mostrarlos
if (dhtSensor.getStatus() == DHTesp::ERROR_NONE) {
// Mostrar datos en el LCD
lcd.setCursor(0, 0);
lcd.print("Temperatura: " + String(data.temperature, 1) + "C");
lcd.setCursor(0, 1);
lcd.print("Humedad: " + String(data.humidity, 1) + "%");
} else {
// Mostrar mensaje de error si los datos no son válidos
lcd.setCursor(0, 0);
lcd.print("Error en DHT");
}
}
void displayTime() {
// Borrar el contenido del lcd
lcd.clear();
// Obtener datos a tiempo real de la fecha
DateTime now = rtc.now();
lcd.setCursor(0, 0);
lcd.print("Hora: ");
lcd.print(now.hour());
lcd.print(":");
lcd.print(now.minute());
lcd.print(":");
lcd.print(now.second());
}