I got tired of wondering if my code is millis-rollover-safe
- C++ 100%
| src | ||
| LICENSE | ||
| README.md | ||
Arduino timing library
I got tired of thinking if my code is millis-rollover-safe and so I wrote this library.
Usage
Library can be used as periodic timer (where event happens every N milliseconds) or in one-shot mode (I want event to happen ONCE after N milliseconds)
Periodic timer
This can be used in two ways. Option one:
#include <PeriodicTiming.h>
void toggleLed() {
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
PeriodicTiming blink(1000);
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
if (blink.needToRun()) {
toggleLed();
blink.justRan();
}
}
Option two:
#include <PeriodicTiming.h>
void toggleLed() {
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
PeriodicTimingFunc blink(1000, toggleLed);
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
blink.tick();
}
You need to run blink.tick() or check blink.needToRun() regularly to not miss events.
One-shot timer
#include <NextTiming.h>
#define BUTTON 2
void ledOff() {
digitalWrite(LED_BUILTIN, LOW);
}
NextTimingFunc off(ledOff);
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(BUTTON, INPUT_PULLUP);
}
void loop() {
if (digitalRead(BUTTON) == LOW) {
//wait for button to be released
while (digitalRead(BUTTON) == LOW) {
delay(10);
}
digitalWrite(LED_BUILTIN, HIGH);
off.setNextIn(5000);
}
off.tick();
}