three round analog clocks and round gray mats

Warum delay schlecht ist

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.

Nach oben scrollen