Rtc y alarmas.

Hola, estoy trabajando en un timbre automatico para el colegio y e tenido buenos resultados estoy usando un modulo ds1307, un arduino nano y un mini rele. Por lo pronto e echo funcionar las alarmas a las horas que e configurado. Lo que no se como hacer es que solo se activen de lunes a viernes. Si alguien puede ayudarme adjunto el codigo. Desde ya gracias.

#include<Wire.h>
#include <Time.h>
#include <TimeAlarms.h>
#include <DS1307RTC.h>


void setup() {
  
    
  // Preparar la interfaz serial
  Serial.begin(9600);

  // Configurar los pines de salida de relé desactivadoal inicio
  // recordamos que los modulos de reles se activan con un estado bajo
  
  pinMode(12,OUTPUT);
  digitalWrite(12,HIGH);
  
  // Cargar la hora actual desde el RTC e indicar que esto suceda de forma automática durante loop()
  // Utilizamos el método RTC.get() de la libreria DS1307RTC. El RTC debe estar conectado como se
  // indica en el texto y debe tener la fecha y hora correctas
  setSyncProvider(RTC.get);
  if (timeStatus() != timeSet)
    Serial.println("Fallo de RTC");
  else
    Serial.println("Sincronizado con RTC");

  // Crear las alarmas y configurar las funciones correspondientes a cada una
  
  Alarm.alarmRepeat(7, 0, 0, EventoTocandoTimbre);  
  Alarm.alarmRepeat(8, 20, 0, EventoTocandoTimbre); 
  Alarm.alarmRepeat(8, 25, 0, EventoTocandoTimbre);  
  Alarm.alarmRepeat(9, 10, 0, EventoTocandoTimbre);  
  Alarm.alarmRepeat(9, 15, 0, EventoTocandoTimbre);  
  Alarm.alarmRepeat(10, 0, 0, EventoTocandoTimbre); 
  Alarm.alarmRepeat(10, 05, 0, EventoTocandoTimbre);  
  Alarm.alarmRepeat(10, 50, 0, EventoTocandoTimbre); 
  Alarm.alarmRepeat(10, 55, 0, EventoTocandoTimbre); 
  Alarm.alarmRepeat(11, 40, 0, EventoTocandoTimbre);  
  Alarm.alarmRepeat(11, 45, 0, EventoTocandoTimbre); 
  Alarm.alarmRepeat(12, 25, 0, EventoTocandoTimbre);  
  Alarm.alarmRepeat(12, 25, 0, EventoTocandoTimbre);  
  Alarm.alarmRepeat(13, 15, 0, EventoTocandoTimbre);  
  Alarm.alarmRepeat(11, 40, 0, EventoTocandoTimbre); 
  Alarm.alarmRepeat(12, 30, 0, EventoTocandoTimbre);  
  Alarm.alarmRepeat(13, 50, 0, EventoTocandoTimbre); 
  Alarm.alarmRepeat(13, 55, 0, EventoTocandoTimbre); 
  Alarm.alarmRepeat(14, 40, 0, EventoTocandoTimbre);  
  Alarm.alarmRepeat(14, 45, 0, EventoTocandoTimbre); 
  Alarm.alarmRepeat(15, 30, 0, EventoTocandoTimbre);  
  Alarm.alarmRepeat(15, 30, 0, EventoTocandoTimbre);  
  Alarm.alarmRepeat(16, 15, 0, EventoTocandoTimbre);  
  Alarm.alarmRepeat(16, 25, 0, EventoTocandoTimbre); 
  Alarm.alarmRepeat(17, 10, 0, EventoTocandoTimbre);  
  Alarm.alarmRepeat(17, 15, 0, EventoTocandoTimbre); 
  Alarm.alarmRepeat(18, 00, 0, EventoTocandoTimbre); 
  Alarm.alarmRepeat(18, 00, 0, EventoTocandoTimbre);  
  Alarm.alarmRepeat(18, 45, 0, EventoTocandoTimbre); 
    
}

void loop() {
  // Mostrar el reloj en el monitor serial
  digitalClockDisplay();

  // Esperar 1 segundo y procesar las Alarmas mientras tanto...
  // El metodo Alarm.delay() procesa en el fondo las alarmas y llamara a las funciones indicadas
 
   //if (now.day() < 6);
   Alarm.delay(1000);
}

/**
   Funcion callback que activa el relevador en el pin 3 (enciende la luz)
*/
void EventoTocandoTimbre()
{
  Serial.println("Tocando timbre");
  digitalWrite(12,LOW);
  delay(3000);
  digitalWrite(12,HIGH);

  
}


/**
   Funciones para la impresion del reloj al monitor serial de arduino
*/
void digitalClockDisplay() {
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.println();
  }

void printDigits(int digits) {
  Serial.print(":");
  if (digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

No es apropiado que si usas TimeAlarm uses delay()

void EventoTocandoTimbre()
{
  Serial.println("Tocando timbre");
  digitalWrite(12,LOW);
  delay(3000);                      /// <======== MALLLLLL
  digitalWrite(12,HIGH);  
}

Lo que tienes que hacer es por cada evento un accion y otra que apague.
Si qquieres que este 3 segundos bueno pones por ejemplo

Alarm.alarmRepeat(8, 20, 0, EventoTocandoTimbre);
Alarm.alarmRepeat(8, 20, 3, EventoApagoTimbre);

La que acciona sera

void EventoTocandoTimbre()
{
  Serial.println("Tocando timbre");
  digitalWrite(12,LOW);
}

void EventoApagoTimbre() {
  digitalWrite(12,HIGH);  
}

Asi por cada una.
Debes ajustar en el header de TimeAlarm.h para que acepte la cantidad de alarmas que estas configurando. Sino solo funciona con 8 creo no recuerdo pero esta limitada

Te recomiendo ver este video, es de el Profe Garcia, hace exactamente lo que tu utilizas

Timbre Colegio : Profe Garcia

te dejo el codigo que el proporciona adjunto, el utiliza un modulo RTC DS3231

Timbre_escuela_.ino (13.3 KB)