delay() ist in Arduino- und Mikrocontroller-Programmierung oft als „schlecht“ verschrien, aber der Grund ist eher technischer Natur: Sie blockiert den Mikrocontroller und verhindert alles andere, während sie läuft. Lass mich das Schritt für Schritt erklären:
1. Blockierende Funktion
delay(ms)pausiert komplett das Programm für die angegebene Zeit.- Beispiel:
delay(1000);stoppt alles eine Sekunde lang. - Währenddessen kann der Mikrocontroller keine anderen Aufgaben ausführen – keine LED-Blinkmuster, keine Sensormessungen, kein Webserver, kein Servomotor-Update.
2. Problem bei mehreren Aufgaben
Wenn du z. B. LEDs animieren, Servos steuern und Sounds abspielen willst, funktioniert delay() nicht gut:
- Alles bleibt stehen, bis die Verzögerung vorbei ist.
- Wenn du z. B. eine Animation alle 50 ms aktualisieren willst, aber ein
delay(1000)dazwischen liegt, hakt die Animation komplett.
3. Schlechte Reaktionsfähigkeit
- Bei einem Knopf, der gedrückt werden soll, reagiert das System erst nach Ende von
delay(). - Bei längeren Delays spürt der Benutzer also eine spürbare Verzögerung.
4. Alternative: millis()
millis()liefert die verstrichene Zeit seit dem Start des Boards.- Damit kannst du nicht-blockierende Zeitsteuerung machen:
unsigned long previousMillis = 0;
const long interval = 1000;
void loop() {
unsigned long currentMillis = millis();
if(currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
// Aktion ausführen, z.B. LED umschalten
}
// Hier können andere Tasks parallel laufen
}- Vorteil: LED blinken, Sensor auslesen, Servos steuern – alles gleichzeitig, ohne blockierende Delay-Pausen.
5. Zusammenfassung
- Delay = blockierend → schlechte Multitasking-Fähigkeit
- Millis = nicht-blockierend → multitaskingfreundlich, reaktionsschnell
- Bei kleinen Projekten geht
delay()noch, bei komplexeren oder Echtzeit-Aufgaben führt es zu Problemen.



