Yes, DateTimeAlarms.h
Here is my the modified code. note that you need the latest version of DateTime.h for this to compile with 0012
/*
DateTimeAlarms.h - Arduino Date and Time alrms library
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
#ifndef DateTimeAlarms_h
#define DateTimeAlarms_h
#include <inttypes.h>
//#include <wiring.h> // commenting this out was the only change necessary for 0012
#include "dateTime.h"
typedef enum {
dtMillisecond, dtSecond, dtMinute, dtHour, dtDay //,clkMonth,clkYear
} dtUnits_t;
typedef struct {
uint8_t isEnabled :1 ;
uint8_t isOneShot :1 ;
uint8_t isAlarm :1 ;
}
AlarmMode_t ;
typedef uint8_t AlarmID_t;
#define dtINVALID_ALARM_ID 255
#define dtNBR_ALARMS 6
class AlarmClass; // forward reference
typedef void (*OnTick_t)(uint8_t); // alarm callback function typedef
// class defining an alarm instance, only used by dtAlarmsClass
class AlarmClass
{
private:
public:
AlarmClass();
OnTick_t onTickHandler;
void updateNextTrigger();
time_t value;
time_t nextTrigger;
AlarmID_t ID; // unique instance id (only used for debugging
AlarmMode_t Mode;
};
// class containing the collection of alarms
class dtAlarmsClass
{
friend class TimerClass;
private:
AlarmClass Alarm[dtNBR_ALARMS];
void serviceAlarms();
boolean isServicing;
AlarmID_t nextID;
AlarmID_t create( time_t value, OnTick_t onTickHandler,boolean isAlarm, boolean isEnabled );
public:
dtAlarmsClass();
void delay(unsigned long ms);
uint8_t getDigitsNow( dtUnits_t Units); // returns the current digit value for the given time unit
void waitForDigits( uint8_t Digits, dtUnits_t Units);
void waitForRollover(dtUnits_t Units);
// functions for specific alarms identifed by alarm ID
AlarmID_t createAlarm( time_t value, OnTick_t onTickHandler, boolean isEnabled = true );
AlarmID_t createTimer( time_t value, OnTick_t onTickHandler, boolean isEnabled = true );
void setValue(AlarmID_t ID, time_t value);
void enable(AlarmID_t ID);
void disable(AlarmID_t ID);
};
extern dtAlarmsClass dtAlarms; // make an instance for the user
/*==============================================================================
* MACROS
*============================================================================*/
/* public */
#define waitUntilThisSecond(_val_) waitForDigits( _val_, dtSecond)
#define waitUntilThisMinute(_val_) waitForDigits( _val_, dtMinute)
#define waitUntilThisHour(_val_) waitForDigits( _val_, dtHour)
#define waitUntilThisDay(_val_) waitForDigits( _val_, dtDay)
#define waitMinuteRollover() waitForRollover(dtSecond)
#define waitHourRollover() waitForRollover(dtMinute)
#define waitDayRollover() waitForRollover(dtHour)
#define AlarmHMS(_hr_, _min_, _sec_) (_hr_ * SECS_PER_HOUR + _min_ * SECS_PER_MIN + _sec_)
#endif /* Clock_h */