Te fijaste si dowSaturday coincide con el valor esperado?
Me has obligado a tener que hacer un programa completo para probarlo.
Hora fijada a las 7:29:40am 2/6/2018 que fue sabado
Presionar y para cambioAlarmas()
Presionar s mostrar la hora segundo a segundo.
Presionar m para mostrar la hora cuando cambian los minutos.
Los dias van de Domingo = 0 a Sabado = 7
Configuro alarma
ON : 07:31:00 Dia:7
OFF: 07:32:00 Dia:7
Enciendo Rele A1
Apago Rele A1
Este ha sido el resultado.
No tengo mas tiempo pero esperaba que me mostrara las horas en Enciendo y apago Rele A1 pero por un detalle que configuré antes para activarlo por el puerto serie no pude
Con 'y' activas cambio de alarmas
con 's' que te muestre la hora cada segundo y con 'm' solo cuando cambian los minutos
Este es el código y funciona perfecto
#include <Time.h>
#include <TimeAlarms.h>
AlarmID_t alarmaUA1Onn;
AlarmID_t alarmaUA1Off;
int hora = 7, minuto = 31;
int horaApagado = 7, minutoApagado = 32;
bool fseg = false, fminuto = false;
void setup() {
Serial.begin(9600);
Serial.println("Hora fijada a las 7:29:40am 2/6/2018 que fue sabado");
Serial.println("Presionar y para cambioAlarmas()");
Serial.println("Presionar s mostrar la hora segundo a segundo.");
Serial.println("Presionar m para mostrar la hora cuando cambian los minutos.");
Serial.println("Los dias van de Domingo = 0 a Sabado = 7");
Serial.println();
setTime(7,29,40,2,6,18); // set time to 7:29:40am 2/6/2018
cambioAlarmas();
}
void loop() {
if (Serial.available()) {
char str = Serial.read();
switch (str) {
case 'y': cambioAlarmas();
break;
case 's': fseg = !fseg;
break;
case 'm': fminuto = !fminuto;
break;
}
}
digitalClockDisplay();
Alarm.delay(0); // sin esto no funciona nada
// he puesto 1 milisegundo para que puedas
// ver como evoluciona dia a dia en poco tiempo
// luego lo pones en 1000
}
void cambioAlarmas() {
char buffer[30];
Alarm.disable(alarmaUA1Onn);
Alarm.free(alarmaUA1Onn);
Alarm.disable(alarmaUA1Off);
Alarm.free(alarmaUA1Off);
Serial.println("Configuro alarma");
alarmaUA1Onn = Alarm.alarmOnce(dowSaturday, hora, minuto, 0, enciendeReleA1);
sprintf(buffer, "ON : %02d:%02d:%02d Dia:%d", hora, minuto, 0, dowSaturday);
Serial.println(buffer);
if (minuto++> 59){
minuto = 0;
if (hora++>23) {
hora = 0;
minuto = 0;
}
}
alarmaUA1Off = Alarm.alarmOnce(dowSaturday,horaApagado,minutoApagado, 0, apagaReleA1);
sprintf(buffer, "OFF: %02d:%02d:%02d Dia:%d", horaApagado, minutoApagado, 0, dowSaturday);
Serial.println(buffer);
if (minutoApagado++> 59){
minutoApagado = 0;
if (horaApagado++>23) {
horaApagado = 0;
minutoApagado = 0;
}
}
}
void enciendeReleA1() {
digitalClockDisplay();
Serial.println("Enciendo Rele A1");
}
void apagaReleA1() {
digitalClockDisplay();
Serial.println("Apago Rele A1");
}
void digitalClockDisplay(){
static int secondAnt = 0;
static int minuteAnt = 0;
char buffer[10];
if (fseg)
if (second() != secondAnt){
sprintf(buffer, "%02d:%02d:%02d", hour(), minute(), second());
Serial.println(buffer);
secondAnt = second();
}
if (fminuto)
if (minute() != minuteAnt){
sprintf(buffer, "%02d:%02d:%02d", hour(), minute(), second());
Serial.println(buffer);
minuteAnt = minute();
}
}