Timer ohne Delay-Funktion

Für ganz einfache Zwecke (z. B. um eine LED blinken zu lassen) reicht die leicht verständliche Delay-Funktion völlig aus. Dabei muss berücksichtigt werden, dass während der Verzögerungszeit keine weiteren Befehle vom Arduino ausgeführt werden, er also blockiert ist. Ein Tastendruck wird also während der Ablaufzeit des Timers nicht angenommen. Für umfangreichere Anwendung bietet sich an, einen der integrierten Timer des Arduino zu verwenden. Damit werden die v. g. Probleme vermieden.

In diesem dokumentierten Beispiel blinken zwei LEDs mit unterschiedlichen On/Off-Zeiten:

/* Beispiel für 2 LEDs mit unterschiedlichen Blinkzeiten (ohne Delay)
*  Version 1.0
*  Datum: 20.11.2019
*  Autor: Hans M. Herbrand
*  Website: herbrand.org
*  Credits: https://forum.arduino.cc/index.php?topic=360714.msg2487415#msg2487415
*/
// LED 13
const int ledPin1 = 13;
const unsigned long onTime_1 = 500;    // LED On in ms
const unsigned long offTime_1 = 5000;  // LED Off in ms
unsigned long previousMillis_1;

// LED 12
const int ledPin2 = 12;
const unsigned long onTime_2 = 500;    // LED On in ms
const unsigned long offTime_2 = 1000;  // LED Off in ms
unsigned long previousMillis_2;

void setup() {
  pinMode(ledPin1,13);
  pinMode(ledPin2,12);

}

void loop()
{
  // LED 13
  if (millis() - previousMillis_1 > onTime_1){
    digitalWrite(ledPin1, LOW);
  }
  if (millis() - previousMillis_1 > offTime_1){
    previousMillis_1 = millis();   
    digitalWrite(ledPin1, HIGH);
  }
  // LED 12
  if (millis() - previousMillis_2 > onTime_2){
    digitalWrite(ledPin2, LOW);
  }
  if (millis() - previousMillis_2 > offTime_2){
    previousMillis_2 = millis();   
    digitalWrite(ledPin2, HIGH);
  }

  
}

 

Die jeweiligen Werte lassen sich ändern und das Script kann für eigene Zwecke angepasst werden.