kk logo

In der Welt von Arduino ist die Funktion millis() das Multitool für die Zeitsteuerung. Während der herkömmliche delay()-Befehl den gesamten Mikrocontroller pausiert („blockiert“), läuft millis() im Hintergrund wie eine interne Stoppuhr mit. Sie zählt die Millisekunden, die seit dem Start des aktuellen Programms vergangen sind. Das ermöglicht es, zeitgesteuerte Aktionen auszuführen, während der Prozessor gleichzeitig andere Aufgaben erledigt wie das Einlesen von Sensoren oder das Reagieren auf Tastendrücke.

millis() in ArduBlock

Durch den Vergleich des gespeicherten millis() Wertes mit dem aktuellen millis()-Wert lässt sich mathematisch feststellen, ob eine bestimmte Zeitspanne verstrichen ist. Dies erfordert ein Umdenken weg vom „Warten“ hin zum „Überprüfen“, bietet aber eine weitaus größere Flexibilität in der Programmgestaltung.

1. Millis auslesen

1 Arduino Millis Zeitfunktionen mit Ardublock programmieren

Im einfachsten Fall dient der millis()-Block dazu, den internen Zeitwert direkt auszulesen. In diesem Beispiel wird der aktuelle Wert ohne Verzögerung an den Seriellen Monitor gesendet. Man erkennt deutlich, wie schnell die Schleife (Loop) durchlaufen wird: Die Zahlen steigen in minimalen Schritten an, was zeigt, dass der Arduino tausende Male pro Sekunde prüft und sendet. Dies verdeutlicht die enorme Arbeitsgeschwindigkeit des Mikrocontrollers, wenn er nicht durch Pausen gebremst wird.

2. Millis von Delay nicht blockiert

2 Arduino Millis Zeitfunktionen mit Ardublock programmieren

In diesem Versuchsaufbau wird ein delay(1000) in die Schleife eingebaut. Der Serielle Monitor zeigt nun eine interessante Beobachtung: Die ausgegebenen millis()-Werte springen jeweils um etwa 1000 Einheiten nach oben. Das beweist zwei Dinge: Erstens zählt die interne millis()-Uhr im Hintergrund auch während eines Delays ununterbrochen weiter. Zweitens sieht man jedoch das Problem der Blockierung der Arduino kann während der Wartezeit keine anderen Befehle (wie das Senden der Daten) ausführen, was die Reaktionsfähigkeit des Systems einschränkt.

3. Blink-LED mit millis und ohne Delay

3 Arduino Millis Zeitfunktionen mit Ardublock programmieren

Hier siehst du die praktische Anwendung der nicht-blockierenden Zeitsteuerung für eine Blink-LED. Das Programm nutzt eine Variable (konstant-millis) als Referenzpunkt. In jedem Durchlauf wird geprüft, ob die Differenz zwischen der aktuellen Zeit und dem gespeicherten Referenzpunkt größer als 500ms ist. Erst wenn diese Bedingung erfüllt ist, wird der Zustand von Pin 4 (der LED) umgeschaltet und der Referenzpunkt auf die neue aktuelle Zeit gesetzt. So blinkt die LED präzise, während der Loop-Durchlauf für andere Aufgaben frei bleibt.

4. Blinkfrequenz über Poti einstellen

4 Arduino Millis Zeitfunktionen mit Ardublock programmieren

Dieses fortgeschrittene Beispiel kombiniert die millis() Steuerung mit einem analogen Eingang. Über einen Potentiometer an Pin A0 wird ein Wert eingelesen und mit dem zuordnen-Block (Map) in einen Zeitbereich von 0 bis 3000 Millisekunden umgewandelt. Dieser dynamische Wert wird zur aktuellen Zeit addiert, um das nächste Schaltintervall festzulegen. Das Ergebnis ist eine Blink LED, deren Geschwindigkeit sich stufenlos und ohne Verzögerung im Programmablauf über das Potentiometer regeln lässt ein klassisches Beispiel für eine reaktive Steuerung.

Ronnie

schwäbischer tüftler und bastler, kraftsportler, neurodivers, 45 Jahre, 1 Frau, 5 Kinder und 1003 Ideen. 

1.2 ronnie berzins

Kontakt

visitenkarte