I got tired of wondering if my code is millis-rollover-safe
Find a file
2026-02-24 19:07:19 +01:00
src Add reset to PeriodicTimingFunc 2026-02-24 19:07:19 +01:00
LICENSE Initial commit 2026-02-24 17:55:36 +01:00
README.md Fix readme 2026-02-24 18:05:13 +01:00

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();
}