Pause mit millis anstatt delay

Pausen mit “delay” blockieren den weiteren Ablauf eines Programms (Sketch), weil bis zum Ablauf der Zeit keine Eingaben angenommen werden. Als Alternative bietet sich “millis” an, wodurch andere Funktionen unabhängig vom Ablauf der Pausen durchgeführt werden können.

Einfaches Beispiel für eine Pause von einer Sekunde [ersetzt delay(1000)]:

/*  Beispiel für eine Pause von einer Sekunde (1000 ms)
 *  Version 1.0
 *  Datum: 09.12.2021
 *  Autor: Hans M. Herbrand
 *  Website: herbrand.org
 *  Credits: https://www.delftstack.com/de/howto/arduino/arduino-millis/
 */

unsigned long startTime;            // Startzeit
unsigned long currentTime;          // Aktuelle Zeit
const unsigned long period = 1000;  // Pausenlänge (Intervall)
const byte ledPin = 13;

void setup()
{
    pinMode(ledPin, OUTPUT);
    startTime = millis();  //initial start time
    Serial.begin(9600);
}

void loop()
{
    currentTime = millis();
    if (currentTime - startTime >= period) //Pause abgelaufen?
    {
        // Anweisung ausführen (z. B. LED blinkt)
        startTime = currentTime;
        Serial.println("LED blinkt");
    }
}

Die Pausenlänge lässt sich durch Verändern der Konstante “const unsigned long period” beliebig anpassen.

Wenn mehrere derartige Timer benötigt werden, lassen sich die Konstanten beispielweise durch Ergänzen um eine Ziffer für einen weiteren Timer benutzen:

Aus
unsigned long startTime;
wird dann
unsigned long startTime2;
usw.

Im Loop sind dann ebenfalls die gleichen Ergänzungen vorzunehmen.

Mit dem Seriellen Monitor wird hier als Muster eine Ausgabe “LED blinkt” erzeugt, um die Funktion des Scripts zu demonstrieren (muss später entfernt werden).