#include "RTClib.h"
RTC_DS3231 RTC; // inicializa el modulo RTC
int r_diaSemana; // almacena el resultado del dia de la semana calculado
const int timbre = 13; // Pin 13 encargado de activar el timbre, se conecta al Rele
int segundo;
int minuto;
int hora;
int tiempo_timbre=6000; // Tiempo continuo que dura el timbre sonando, en milisegundos 5000 = 5 segundos
String horario[2]; //aqui guardaremos los horarios
void setup() {
//añadimos los horarios, separados por espacio y siempre con el minimo de dígitos (no usar 09:05 sino 9:5)
horario[0]="7:30 8:15 8:20 9:5 9:10 9:55 10:25 10:45 "; //dejar siempre un espacio detrás
horario[0]=horario[0]+"11:35 11:40 12:25 12:30 13:15 ...etc";//dejar siempre un espacio detrás
horario[1]="12:45 13:30 13:35 ...etc";
pinMode(timbre, OUTPUT); // Configura como salida el pin 13
Wire.begin();
RTC.begin(); // Inicia la comunicaci¢n con el RTC
// RTC.adjust(DateTime(__DATE__, __TIME__)); // Lee la fecha y hora del PC (Solo en la primera carga)
// el anterior se usa solo en la configuracion inicial luego se pone como comentario
// y se vuelve a cargar el programa sin esa linea.
Serial.begin(9600); // Establece la velocidad de datos del puerto serie a 9600
}
void activar_timbre(){
digitalWrite(timbre, LOW);
Serial.println("Timbre Activo");
delay(tiempo_timbre);
}
void loop() {
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
Serial.print((String)now.year()+"/"+(String)now.month()+"/"+(String)now.day()+" ");
Serial.println((String)now.hour()+":"+(String)now.minute()+":"+(String)now.second());
segundo=now.second();
minuto=now.minute();
hora=now.hour();
int r_diaSemana= now.dayOfTheWeek(); // llama a la funcion que calcula el dia de la semana y lo almacena en r_diaSemana
if (r_diaSemana > 0 || r_diaSemana < 6)
{
if(hora >=7 && hora<14)
{
if (horario[0].indexOf((String)hora+":"+String(minuto)+" ")>=0) activar_timbre(); // llama a la funcion que activa el horario 1
}
if(hora >=12 && hora<19)
{
if (horario[1].indexOf((String)hora+":"+String(minuto)+" ")>=0) activar_timbre(); // llama a la funcion que activa el horario 1
}
}
digitalWrite(timbre, HIGH); // apaga el timbre
delay(1000); // La informaci¢n se actualiza cada 1 seg.
} //////////////////////////////// Fin del void loop(), inician las Funciones/////////////////////////