Überlaufsicheren Timer - etwas alle x Sekunden machen

Schön finde ich auch das Gespiele mit dem Modulo %. Es Spart eine Menge an unsigned Long Variablen.

uint16_t blinkerIntervall= 2000;   // An + Aus Zeit des Blinkers

void setup() {
  pinMode (LED_BUILTIN, OUTPUT);
}

void loop() {
  if ( millis() % blinkerIntervall*2 > blinkerIntervall) digitalWrite(LED_BUILTIN,HIGH);
  else digitalWrite(LED_BUILTIN,LOW);
}

Geht natürlich auch mit unterschiedlichen An und Aus Zeiten.

uint16_t blinkerIntervall = 2000;   // An + Aus Zeit des Blinkers
uint16_t blinkerAnZeit = 300;      // Zeit die die LED an ist. 

void setup() {
  pinMode (LED_BUILTIN, OUTPUT);
}

void loop() {
  if ( millis() % (blinkerIntervall+blinkerAnZeit) > blinkerIntervall) digitalWrite(LED_BUILTIN,HIGH);
  else digitalWrite(LED_BUILTIN,LOW);
}