There are problems. I incorporated viknet's macros from post right above because the day of week alarms were firing every second. After they were incorporated, the DOW alarms are firing on the wrong day and apparently doing a call(0) causing the board to reboot on the second try. I started the tests at 1/1/1971 to avoid the various problems with the first year.
code used:
#include <Time.h>
#include <TimeAlarms.h>
AlarmID_t morningAlarmID, afternoonAlarmID, eveningAlarmID;
AlarmID_t tuesdayAlarmID, saturdayAlarmID;
char buf[200];
void setup()
{
Serial.begin(57600);
Serial.println("Initializing...");
setTime(0,0,0,1,1,1971);
morningAlarmID = Alarm.alarmRepeat(8,30,0, onAlarm);
afternoonAlarmID = Alarm.alarmRepeat(13,25,0,onAlarm);
eveningAlarmID = Alarm.alarmRepeat(17,45,0,onAlarm);
tuesdayAlarmID = Alarm.alarmRepeat(dowTuesday,12,31,0,onAlarm);
// saturdayAlarmID = Alarm.alarmRepeat(dowSaturday,1,45,0,onAlarm);
pinMode(13, OUTPUT);
Serial.println("Begin test...");
}
void onAlarm()
{
// alarm callback function
AlarmId id = Alarm. getTriggeredAlarmId();
if(id == morningAlarmID) {
if(hour() != 8 || minute() != 30){
sprintf(buf,"Morning Alarm Failure: Time %d:%d:%d %d/%d/%d", hour(),minute(),second(),month(),day(),year());
Serial.println(buf);
}
}
else if (id == afternoonAlarmID) {
if(hour() != 13 || minute() != 25){
sprintf(buf,"Afternoon Alarm Failure: Time %d:%d:%d %d/%d/%d", hour(),minute(),second(),month(),day(),year());
Serial.println(buf);
}
}
else if (id == eveningAlarmID) {
if(hour() != 17 || minute() != 45){
sprintf(buf,"Evening Alarm Failure: Time %d:%d:%d %d/%d/%d", hour(),minute(),second(),month(),day(),year());
Serial.println(buf);
}
}
else if (id == tuesdayAlarmID) {
if(hour() != 1 || minute() != 45 || weekday() != dowTuesday){
sprintf(buf,"Tuesday Alarm Failure: Time %s %d:%d:%d %d/%d/%d", dayStr(day()),hour(),minute(),second(),month(),day(),year());
Serial.println(buf);
}
}
else if (id == saturdayAlarmID) {
if(hour() != 17 || minute() != 45 || weekday() != dowSaturday){
sprintf(buf,"Saturday Alarm Failure: Time %s %d:%d:%d %d/%d/%d", dayStr(day()),hour(),minute(),second(),month(),day(),year());
Serial.println(buf);
}
}
else {
Serial.println("Invalid Alarm ID");
sprintf(buf,"Time %s %d:%d:%d %d/%d/%d", dayStr(day()),hour(),minute(),second(),month(),day(),year());
Serial.println(buf);
}
}
int savedMonth = 0;
int savedHour = 0;
void loop()
{
if(savedHour != hour()){ //just to let me know it's alive
savedHour = hour();
digitalWrite(13, digitalRead(13)==HIGH?LOW:HIGH); // set the LED on
}
if(savedMonth != month()){ // how far it's gotten
savedMonth = month();
sprintf(buf,"Time %d:%d:%d %d/%d/%d", hour(),minute(),second(),day(),month(),year());
Serial.println(buf);
}
Alarm.delay(0);
adjustTime(55);
// sprintf(buf,"Time %d:%d:%d %d/%d/%d", hour(),minute(),second(),day(),month(),year());
// Serial.println(buf);
}
results:
Initializing...
Begin test...
Time 0:0:0 1/1/1971
Tuesday Alarm Failure: Time Friday 12:31:18 1/6/1971
Initializing...
Begin test...
Time 0:0:0 1/1/1971
Tuesday Alarm Failure: Time Friday 12:31:18 1/6/1971
Initializing...
Begin test...
Time 0:0:0 1/1/1971
Tuesday Alarm Failure: Time Friday 12:31:18 1/6/1971
Initializing...
The daily alarms seem to be working fine.