#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal.h> // Incluye la biblioteca LiquidCrystal
RTC_DS3231 rtc;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Configura los pines de la pantalla LCD (RS, E, D4, D5, D6, D7)
const int timbrePin = 9;
const int horarios[][2] = {
{12, 48},
{12, 50},
{15, 45}
};
int timbreCount = 0;
void setup() {
Serial.begin(9600);
if (!rtc.begin()) {
Serial.println("No se pudo encontrar el módulo RTC. Verifique las conexiones.");
while (1);
}
lcd.begin(16, 2); // Inicializa la pantalla LCD de 16x2
pinMode(timbrePin, OUTPUT);
}
void loop() {
DateTime now = rtc.now();
// Mostrar la hora actual en la pantalla LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Hora: ");
lcd.print(now.hour());
lcd.print(":");
lcd.print(now.minute());
lcd.print(":");
lcd.println(now.second());
// Mostrar la hora actual en el monitor serial
Serial.print("Hora actual: ");
Serial.print(now.hour());
Serial.print(":");
Serial.print(now.minute());
Serial.print(":");
Serial.println(now.second());
for (int i = 0; i < sizeof(horarios) / sizeof(horarios[0]); i++) {
int horaTimbre = horarios[i][0];
int minutoTimbre = horarios[i][1];
if (now.hour() == horaTimbre && now.minute() == minutoTimbre && timbreCount < 2) {
// Activa el timbre
tone(timbrePin, 1000); // Cambia la frecuencia según tu preferencia
delay(5000); // Duración del timbre en milisegundos (5 segundos en este caso)
noTone(timbrePin); // Apaga el timbre
timbreCount++; // Incrementa el contador
break; // Sale del bucle una vez que se ha encontrado un horario coincidente
}
}
delay(1000); // Espera 1 segundo antes de verificar nuevamente
}