timer.h
class MillisTimer{
public:
MillisTimer(uint32_t time, functionPtr action, bool repeat);
static void processTimers(void);
void start(void);
void start (bool repeat);
void stop(void);
void begin(void);
private:
enum TimerState{
STOPPED,
RUNNING,
}state = STOPPED;
functionPtr callback;
uint32_t delay;
uint32_t lastMillis = 0;
bool repeats;
static std::vector<MillisTimer*>timerArray;
};
timer.cpp
// MillisTimer
std::vector<MillisTimer*> MillisTimer::timerArray;
MillisTimer::MillisTimer(uint32_t milliseconds, functionPtr action, bool repeat) {
//timerArray.push_back(this);
delay = milliseconds;
callback = action;
repeats = repeat;
}
void MillisTimer::begin(void) {
timerArray.push_back(this);
Serial << "Timer Added" << "\n";
}
void MillisTimer::processTimers(void) {
uint32_t currentMillis = millis();
int count = 0;
for (auto& i : timerArray)
{
if(currentMillis - i->lastMillis >= i->delay)
{
if (i->state == RUNNING){
if(i->callback){
i->callback();
}
if (!i->repeats){
i->state = STOPPED;
}
else {
i->lastMillis = currentMillis;
}
}
}
}
}
void MillisTimer::start (void){
lastMillis = millis();
state = RUNNING;
Serial << "Timer Start\n";
}
void MillisTimer::start (bool repeat){
repeats = repeat;
lastMillis = millis();
state = RUNNING;
Serial << "Timer Start\n";
}
void MillisTimer::stop(void){
lastMillis = millis();
state = STOPPED;
}
Anybody recognise what library it comes from? It's so good - example usage below
MillisTimer relayTimer(700, relaytimercallback, false);
relayTimer.begin();
relayTimer.start();
void relaytimercallback(void) {
relayTimer.stop();
relayPin0.off();
}
I've been using this library for the Particle Photon courtesy of (I think?!) @BulldogLowell but can't find the original which was probably for Arduino? I've tried recreating it by stripping back what is particle specific but am just tying myself in knots with compiler errors eg "can't find vector" etc. I have tried supplying a vector library but new errors just crop up.
Thanks