Arduino
Laufzeit
Die Laufzeit ermöglicht es, verschiedene Zeitpunkte während eines Programms zu bestimmen und gleichzeitig auf Programmpausen zu verzichten.
Laufzeit millis()
Die Funktion millis() gibt die Millisekunden an, seit der Arduino gestartet wurde. Man erhält also die absolute Laufzeit seit Programmstart. Über die Differenz der absoluten Laufzeit zum aktuellen Zeitpunkt und einer gespeicherten Laufzeit zu einem vorherigen Zeitpunkt, kann somit jede beliebige Laufzeit innerhalb des Programms ermittelt werden.
Der Vorteil von millis() ist, dass Zeiten bestimmt werden können und so Zeitpunkte definiert werden, ohne das gesamte Programm anzuhalten, wie es bei delay() (Programmpause) der Fall ist. Dadurch können beispielsweise zwei LEDs in einem komplett unabhängigen, zeitlichen Muster blinken.
Laufzeitabhängiges Blinken einer LED
Schreibe ein Programm, das eine LED in den ersten zwei Sekunden leuchten lässt, dann für drei Sekunden die LED ausschaltet, dann für fünf Sekunden die LED blinken lässt und danach wieder von vorne beginnt.
Definiert im setup-Teil des Programms die Variable t_start.
t_start = millis();
Im loop-Teil berechnet ihr dann die aktuelle Laufzeit t_lauf seit dem Zeitpunkt t_start.
t_lauf = millis() - t_start;
Wenn die aktuelle Laufzeit t_lauf größer als 10.000 ms wird, setzt ihr t_start wieder auf die aktuelle absolute Laufzeit millis().
Hierfür benötigt ihr Bedingungen. Damit könnt ihr für verschiedene Werte von t_lauf der Zustandsvariable der LED die folgenden Werte zuweisen:
- 0 bis ≤2000 ms: LED nimmt Zustand HIGH an (sie leuchtet)
- >2000 bis ≤5000 ms: LED nimmt Zustand LOW an (sie geht aus)
- >5000 bis ≤10.000 ms: LED blinkt, d. h. Wechsel zwischen HIGH und LOW (jeweils 100 ms HIGH und 100 ms LOW)
- >10.000 :
t_startwird aufmillis(), d. h. die aktuelle Systemzeit, gesetzt und Umlauf beginnt erneut
Tipp
if und else gibt es auch else if:if (BEDINGUNG 1) { // Code, wenn BEDINGUNG 1 erfüllt ist
}
else if (BEDINGUNG 2) { // sonst Code, wenn BEDINGUNG 2 erfüllt ist
}
else if (BEDINGUNG 3) { // sonst Code, wenn BEDINGUNG 3 erfüllt ist
}
else { // sonst Code, wenn keine der BEDINGUNGEN erfüllt ist
}