Skip to content

Repository files navigation

PollingTimer

Arduino library to manage timing and event in a flexible way with polling

Feature

  • Four timers based on the situation
    • PollingTimer
    • IntervalCounter
    • FrameRateCounter
    • OneShotTimer
  • Timer events with callback / lambda
  • Various APIs to control timers
  • 64bit support

Usage

PollingTimer

#include<PollingTimer.h>
PollingTimer timer;
voidsetup() {
Serial.begin(115200);
timer.start();
}
voidloop() {
if (timer.isRunning()) {
Serial.println(timer.msec());
}
}

IntervalCounter

#include<IntervalCounter.h>
IntervalCounter interval(1.0); // interval is 1.0[sec]voidsetup() {
interval.onUpdate([&]() {
Serial.print("interval count = ");
Serial.print(interval.count());
Serial.print(", time = ");
Serial.println(interval.ms());
});
interval.start();
}
voidloop() {
interval.update(); // event occurs if interval is changed
}

FrameRateCounter

#include<FrameRateCounter.h>
FrameRateCounter fps(30); // set framrate to 30[Hz]voidsetup() {
fps.onUpdate([&]() {
Serial.print("frame no. = ");
Serial.print(fps.frame());
Serial.print(", time = ");
Serial.println(fps.msec());
});
fps.start();
}
voidloop() {
fps.update(); // event occurs if fram has changed
}

OneShotTimer

#include<OneShotTimer.h>
OneShotTimer onshot(5); // event will bevoidsetup() {
oneshot.onUpdate([&]() {
Serial.print("oneshot event, time = ");
Serial.println(millis());
});
oneshot.start();
}
voidloop() {
oneshot.update(); // event occurs only once if time has elapsed
}

PollingTimer States Transition

APIs

PollingTimer (also available on all timer)

virtualvoidstart();
virtualvoidstop();
virtualvoidplay();
virtualvoidpause();
virtualvoidrestart();
virtualvoidclear();
int64_tupdate(); // reqired to trigger events (auto stop, loop, event callbacks, etc.)voidstartFromSec(constdouble from_sec);
voidstartFromMsec(constdouble from_ms);
voidstartFromUsec(constdouble from_us);
voidstartForSec(constdouble for_sec, constbool loop = false);
voidstartForMsec(constdouble for_ms, constbool loop = false);
voidstartForUsec(constdouble for_us, constbool loop = false);
voidstartFromForSec(constdouble from_sec, constdouble for_sec, constbool loop = false);
voidstartFromForMsec(constdouble from_ms, constdouble for_ms, constbool loop = false);
voidstartFromForUsec(constdouble from_us, constdouble for_us, constbool loop = false);
voidstartFromForUsec64(constint64_t from_us, constint64_t for_us, constbool loop = false);
boolisRunning() const;
boolisPausing() const;
boolisStopping() const;
boolhasStarted() const;
boolhasPaused() const;
boolhasStopped() const;
int64_tusec64();
doubleusec();
doublemsec();
doublesec();
doublegetOrigin() const;
uint32_tgetOverflow() const;
doublegetOffsetUsec64() const;
doublegetOffsetUsec() const;
doublegetOffsetMsec() const;
doublegetOffsetSec() const;
int64_tgetDurationUsec64() const;
doublegetDurationUsec() const;
doublegetDurationMsec() const;
doublegetDurationSec() const;
doublegetRemainingTime();
doublegetRemainingLife();
voidsetOffsetUsec64(constint64_t us);
voidsetOffsetUsec(constdouble us);
voidsetOffsetMsec(constdouble ms);
voidsetOffsetSec(constdouble sec);
voidaddOffsetUsec64(constint64_t us);
voidaddOffsetUsec(constdouble us);
voidaddOffsetMsec(constdouble ms);
voidaddOffsetSec(constdouble sec);
voidsetDurationUsec64(constint64_t us);
voidsetDurationUsec(constdouble us);
voidsetDurationMsec(constdouble ms);
voidsetDurationSec(constdouble sec);
voidsetTimeUsec64(constint64_t u);
voidsetTimeUsec(constdouble u);
voidsetTimeMsec(constdouble m);
voidsetTimeSec(constdouble s);
voidsetLoop(constbool b);
boolisLoop() const;
boolhasOffset() const;
boolhasDuration() const;
voidonStart(const std::function<void(void)>& cb);
voidonPause(const std::function<void(void)>& cb);
voidonStop(const std::function<void(void)>& cb);
voidremoveEventOnStart();
voidremoveEventOnPause();
voidremoveEventOnStop();
boolhasEventOnStart() const;
boolhasEventOnPause() const;
boolhasEventOnStop() const;

IntervalCounter (also available on FrameRateCounter & OneShotTimer)

explicitIntervalCounter (constdouble sec = 0.);
voidstartFromCount(constdouble from_count);
voidstartForCount(constdouble for_count, constbool loop = false);
voidstartFromForCount(constdouble from_count, constdouble for_count, constbool loop = false);
voidstartIntervalSec(constdouble interval_sec);
voidstartIntervalMsec(constdouble interval_ms);
voidstartIntervalUsec(constdouble interval_us);
voidstartIntervalFromSec(constdouble interval_sec, constdouble from_sec);
voidstartIntervalFromMsec(constdouble interval_ms, constdouble from_ms);
voidstartIntervalFromUsec(constdouble interval_us, constdouble from_us);
voidstartIntervalSecFromCount(constdouble interval_sec, constdouble from_count);
voidstartIntervalMsecFromCount(constdouble interval_ms, constdouble from_count);
voidstartIntervalUsecFromCount(constdouble interval_us, constdouble from_count);
voidstartIntervalForSec(constdouble interval_sec, constdouble for_sec, constbool loop = false);
voidstartIntervalForMsec(constdouble interval_ms, constdouble for_ms, constbool loop = false);
voidstartIntervalForUsec(constdouble interval_us, constdouble for_us, constbool loop = false);
voidstartIntervalSecForCount(constdouble interval_sec, constdouble for_count, constbool loop = false);
voidstartIntervalMsecForCount(constdouble interval_ms, constdouble for_count, constbool loop = false);
voidstartIntervalUsecForCount(constdouble interval_us, constdouble for_count, constbool loop = false);
voidstartIntervalFromForSec(constdouble interval_sec, constdouble from_sec, constdouble for_sec, constbool loop = false);
voidstartIntervalFromForMsec(constdouble interval_ms, constdouble from_ms, constdouble for_ms, constbool loop = false);
voidstartIntervalFromForUsec(constdouble interval_us, constdouble from_us, constdouble for_us, constbool loop = false);
voidstartIntervalSecFromForCount(constdouble interval_sec, constdouble from_count, constdouble for_count, constbool loop = false);
voidstartIntervalMsecFromForCount(constdouble interval_ms, constdouble from_count, constdouble for_count, constbool loop = false);
voidstartIntervalUsecFromForCount(constdouble interval_us, constdouble from_count, constdouble for_count, constbool loop = false);
voidstartOnce();
voidstartOnceAfterSec(constdouble after_sec);
voidstartOnceAfterMsec(constdouble after_ms);
voidstartOnceAfterUsec(constdouble after_us);
voidstop();
doublecount();
doublegetIntervalUsec64() const;
doublegetIntervalUsec() const;
doublegetIntervalMSec() const;
doublegetIntervalSec() const;
voidsetIntervalUsec64(constint64_tu64);
voidsetIntervalUsec(constdouble us);
voidsetIntervalMsec(constdouble ms);
voidsetIntervalSec(constdouble sec);
boolhasInterval() const;
voidsetOffsetCount(constdouble count);
voidonUpdate(const std::function<void(void)>& f);
boolhasEventOnUpdate() const;
voidremoveEventOnUpdate();
boolupdate();;

FrameRateCounter only

explicitFrameRateCounter(constdouble fps = 1000000.);
voidstartFromFrame(constdouble from_frame);
voidstartForFrame(constdouble for_frame, constbool loop = false);
voidstartFromForFrame(constdouble from_frame, constdouble for_frame, constbool loop = false);
voidstartFps(constdouble fps);
voidstartFpsFromSec(constdouble fps, constdouble from_sec);
voidstartFpsFromMsec(constdouble fps, constdouble from_ms);
voidstartFpsFromUsec(constdouble fps, constdouble from_us);
voidstartFpsFromFrame(constdouble fps, constdouble from_frame);
voidstartFpsForSec(constdouble fps, constdouble for_sec, constbool loop = false);
voidstartFpsForMsec(constdouble fps, constdouble for_ms, constbool loop = false);
voidstartFpsForUsec(constdouble fps, constdouble for_us, constbool loop = false);
voidstartFpsForFrame(constdouble fps, constdouble for_frame, constbool loop = false);
voidstartFpsFromForSec(constdouble fps, constdouble from_sec, constdouble for_sec, constbool loop = false);
voidstartFpsFromForMsec(constdouble fps, constdouble from_ms, constdouble for_ms, constbool loop = false);
voidstartFpsFromForUsec(constdouble fps, constdouble from_us, constdouble for_us, constbool loop = false);
voidstartFpsFromForFrame(constdouble fps, constdouble from_frame, constdouble for_frame, constbool loop = false);
doubleframe();
voidsetFrameRate(constdouble fps);
doublegetFrameRate() const;

OneShotTimer only

explicitOneShotTimer(constdouble sec);
OneShotTimer(constdouble sec, const std::function<void(void)>& f);
voidstart();

Dependent Libraries

Embedded Libraries

Used Inside of

License

MIT

About

Arduino library to manage timing and event in a flexible way with polling

Resources

Stars

10 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages