ESP32: Warum ist es sinnvoll, auf "delay()" zu verzichten und "millis()" anzuwenden?
Erläutern Sie in einem kurzen Text, warum es sinnvoll ist, die Funktion millis() anstelle von delay() zu verwenden, wenn Sie zeitgesteuerte Aufgaben wie das Blinken einer LED implementieren. Gehen Sie dabei insbesondere auf die Vor- und Nachteile von delay() und millis() ein.
Hinweise:
- Berücksichtigen Sie, dass delay() den Programmablauf anhält.
- Erklären Sie, wie millis() es ermöglicht, zeitgesteuerte Aufgaben nicht-blockierend zu gestalten.
- Nennen Sie mindestens ein praktisches Beispiel, in dem millis() von Vorteil ist.
2 Antworten
Mit millis kann man währenddessen noch andere Dinge machen, bei Delay kann man nur eine Sache gleichzeitig machen, weil das Programm angehalten wird, aber mit millis kann man zb in einem Timer oder Intervall noch andere Dinge ins Programm schreiben, die gleichzeitig passieren
Die Verwendung von millis() ist sinnvoll, da delay() den gesamten Programmablauf blockiert. Wenn der delay() aktiv ist, pausiert der Mikrocontroller alle anderen Funktionen, wodurch keine parallelen Aufgaben ausgeführt werden können. Wenn gleichzeitig Sensoren ausgelesen, Eingaben verarbeitet oder andere zeitkritische Aufgaben erledigt werden müssen, kann dies problematisch sein. Im Gegensatz dazu ist millis() nicht-blockierend. Es ermöglicht, die verstrichene Zeit seit Programmstart zu messen, ohne den Programmfluss zu unterbrechen. Dies erlaubt die Implementierung von Aufgaben wie das Blinken einer LED in einem Zeitintervall, während andere Prozesse weiterlaufen. Beispielsweise könnte eine LED alle 500 ms blinken, während gleichzeitig ein Temperatursensor ausgelesen und eine serielle Kommunikation verarbeitet wird. millis() ermöglichen Multitasking-fähige Programme Flexibilität und Effizienz an. Bei Projekten mit mehreren parallelen Aufgaben ist millis() am geeignetsten.