Hola, perdon por reflotar el tema, pero dado que surbyte es un moderador me animo a preguntar.
En el codigo propuesto:
#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();
}
}
donde se indica que día se activa la alarma?, o como se indica.
Por ejemplo si quisiera que se active todos los lunes y viernes.
Saludos