Stehende Autos wollen abbiegen, Fußgänger wollen queren, ein Krankenwagen will durch. Die Ampel interessiert das nicht. Sie zählt rot herunter und lässt nichts vorbei. Erst wenn die Zeit um ist, fließt der Verkehr wieder.
So arbeitet delay() auf einem Arduino oder ESP32: Die Funktion pausiert das Programm für die angegebenen Millisekunden. Die Arduino-Firmware besteht aus der Endlosschleife loop(), in der alle Aufgaben drankommen müssen. Während delay() läuft, zählt der Controller nur Zeit ab. Tasten, Sensorabfragen und Netzwerkereignisse warten, bis die Schleife wieder frei ist.
Eine Taste soll eine LED im Sekundentakt blinken lassen. Mit delay(1000) blockiert die Schleife für eine volle Sekunde, ein kurzer Tastendruck bleibt meist unbemerkt. Stattdessen notiert man die Startzeit mit millis(), dem Millisekundenzähler seit dem Start, und prüft in jedem Durchlauf, ob das Intervall verstrichen ist. Die Taste bleibt dadurch ständig lesbar. Beim Entprellen, dem Unterdrücken des mechanischen Nachschwingens eines Tasters, bremst eine millis()-Sperrzeit nur diese eine Taste aus statt der ganzen Schleife.
Das Bild hat eine Grenze: Die Ampel regelt bewusst, wer fährt und wer wartet. delay() trifft keine solche Entscheidung, es lähmt ausnahmslos alle Aufgaben. Eine kurze Pause am Programmende ist harmlos, solange dort keine Eingaben anfallen.
delay() heißt nicht „Programm pausieren lassen“, sondern „alle Aufgaben gleichzeitig anhalten“. Wer mehrere Aufgaben bedient, vergleicht Zeitdifferenzen mit millis() statt zu warten.
📌 blockierendes Warten · millis()-Vergleich · reaktionsfähige Schleife
📚 IoT von Grund auf · Tag 4 von 30
#Arduino #Mikrocontroller #firmware