Zeit-in-ms (nicht Blockierende Pause & Multitasking)
Maybe your like
Du bist hier: Sketch > Arduino programmieren > Zeit-in-ms (nicht blockierende Pause & Multitasking)
Arduino Referenz: Funktionen > millis() ↗
Arduino Referenz: Funktionen > millis() ↗
Zeit-in-ms (nicht blockierende Pause & Multitasking)
Sketch 1: Zeit-in-ms misst die vergangene Zeit seit dem Einschalten des Arduinos 1. Beschreibung
1.1. Wirkung
Zeit-in-ms gibt die verstrichene Zeit in Millisekunden seit dem Einschalten des Arduinos aus. Diese innere Uhr wird alle 49 Tage oder 4'233'600'000ms auf Null zurückgesetzt. Vorausgesetzt, du schaltest dein Arduino nicht vorher aus ;-)
1.2. Zulässige Werte
Zeit-in-ms gibt positive, ganze Zahlen zurück
1.3. Verwendung
Zeit-in-ms ermöglicht es dir, auf simple Art parallele Vorgänge zu programmieren. Dies ist eine einfache Form von Multitasking.
Mit der inneren Uhr des Arduinos legst du fest, wann gewisse Dinge getan werden sollen. Das Ein- und Ausschalten einer LED wird an die aktuelle- und verstrichene Zeit gebunden. Das könnte so aussehen:
- Schaue auf die Uhr und mache einen Zeitstempel mit der aktuellen Zeit
- Schalte die LED ein
- Schaue auf die Uhr und prüfe, ob seit dem Zeitstempel bereits 1000ms verstrichen sind
- Falls ja, schalte die LED wieder aus
Diese Art von Sketch für eine blinkende LED lässt den Hauptloop immer am Laufen. Er wird nie gestoppt durch pausiere-1000-ms, wie dies z.B. im simplen Sketch Blink der Fall ist.
Falls du während des Blinkens deiner LED eine zweite LED in einem anderen Tempo blinken lassen möchtest, ist das kein Problem.
- arduino.cc: nicht blockierendes Delay ↗
Warum ist das so wichtig? Stelle dir vor, der Abstands-Tempomat deines Autos legt eine Funktionspause ein, weil der Prozessor gerade die Scheibenwischer steuern will :-(
1.4. Geschichte
Frühe Vorläufer von Multitasking hiessen "Multiprogrammierung" und hatten zum Ziel, eine höhere Prozessor-Auslastung im Gegensatz zur sequenziellen Ausführung von Aufgabenlisten zu erreichen. Erste Ansätze basieren auf Ideen aus dem Jahr 1959. Praktisch umsetzen ließen sich solche Konzepte aber erst später mit leistungsfähiger Hardware.
Weite Verbreitung fand Multitasking 1985 im Heimcomputer "Commodore Amiga", welcher massgeblich vom Amerikaner Carl Sassenrath entwickelt wurde. Der Commodore Amiga Computer darf durchaus als der Traum vieler Game-begeisterter Jugendlicher der 80er Jahre bezeichnet werden. Er war auch das erste Gerät, dass von Musikern und Künstlerinnen als kreatives Werkzeug entdeckt wurde.
- Wikipedia: Multitasking ↗
- Wikipedia: Commodore Amiga ↗
- Wikipedia: Carl Sassenrath ↗
Bild 1: Der Commodore Amiga konnte mehrere Dinge gleichzeitig tun und war der Traum vieler Game-verrückter Jugendlicher 2. Ausprobieren
2.1. Eine LED blinken lassen (mit blockierender Pause)
Das untenstehende Beispiel zeigt das sequenzielle Blinken lassen einer LED. Während der Pause von 1000ms ist dein Prozessor blockiert und kann nichts Weiteres tun. So wäre es nicht machbar, eine zweite LED in einem anderen Takt blinken zu lassen.
Sketch 2: "Blink" lässt LED 1 im Sekundentakt blinken 2.2. Eine LED blinken lassen (mit nicht blockierender Pause)
Dieses Sketch hat den genau gleichen Effekt, wie das Programm 2.1. Da es aber nie unterbrochen wird, könnte ein zweites Blinken in einer völlig anderen unabhängigen Frequenz problemlos programmiert werden.
Es fragt: Ist die abgelaufene Zeit seit dem letzten Zeitstempel grösser als 1000ms? Wenn ja, schalte den Zustand von LED 1 in sein Gegenteil um und setzte den Zeitstempel auf die aktuelle Zeit.
Sketch 3: Nicht blockierendes Blinken einer LED (Klick für Zoom) 2.3. Vier LEDs unabhängig blinken lassen (einfaches Multitasking)
Das Sketch von 2.2. auf vier LEDs angewendet, die in unterschiedlichen Tempi blinken. Mit diesem Programm hast du eine einfache Variante von Multitasking umgesetzt.
Sketch 4: Einfaches Multitasking mehrere LEDs, die unabhängig voneinander blinken (Klick für Zoom) 3. PGLU-Sketches mit nicht blockierenden Methoden
Die meisten PGLU Projekte sind rein sequenziell programmiert. Du kommst also prima zurecht, wenn du pausiere-xxx-ms in deinen Sketches anwendest. Ein Paar Gelegenheiten gibt es aber, nicht blockierende Methoden auszuprobieren und diese sind sehr spannend. Zum Teil wurde auch mit anderen Strategien, als mit Zeit-in-ms gearbeitet.
- Roboter Auto Aufgabe 5 ↗
- Roboter Auto Variante 3 ↗
- LED Plexiglaslampe Aufgabe 9 ↗
- workshop.pglu.ch Präzise Tonhöhen berechnen ↗
- workshop.pglu.ch Ultraschallsensor ↗
Tag » Arduino Pause Mit Millis
-
Pausing And Resume Timer With Millis() - Arduino Forum
-
Led Millis Mit Pause - Deutsch - Arduino Forum
-
Blink Without Delay | Arduino Documentation
-
Pausen - Deutsch - Arduino Forum
-
Confused On How To Get Millis To Pause In Between LED Fading
-
Pause Mit Millis Anstatt Delay
-
Why You Shouldn't Always Use The Arduino Delay Function
-
Pause Muss Auch Mal Sein - Beispiele Zum Nichtblockierenden ...
-
Arduino Millis Lesson - Hong Kong
-
Introduire Le Temps - Arduino : Premiers Pas En Informatique ...
-
Timer Mit Arduino – Eine Bessere Alternative Zum Delay-Befehl
-
Is There A Way To Pause And Resume Void Loop In Arduino Using Two ...
-
Arduino - Turn LED ON And OFF With Button - The Robotics Back-End