millis()

Beschreibung

Gibt die Anzahl von Millisekunden zurück, seit das Arduino-Board das aktuelle Programm gestartet hat. Diese Zahl läuft nach etwa 50 Tagen über (geht auf Null zurück).

Syntax

time_ms = millis()

Parameter

  • Keine.

Rückgabewert

Anzahl der Millisekunden seit dem Programmstart. Datentyp: unsigned long.

Beispielcode

Beispielcode 1

Der Code liest die Millisekunden seit Beginn des Sketches des Arduino-Boards und gibt diese auf den seriellen Port aus.

unsigned long time_ms; void setup() { Serial.begin(9600); } void loop() { Serial.print("Time: "); time_ms = millis(); Serial.println(time_ms);// Gibt die Zeit seit dem Programmstart aus delay(1000); // Eine Sekunde warten, um keine riesigen Datenmengen zu senden }

Das ergebnis am seriellen monitor:

COM6
Send
Time: 0 Time: 999 Time: 1999 Time: 3000 Time: 4000 Time: 5000 Time: 6000 Time: 7001 Time: 8001 Time: 9001
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Beispielcode 2

Print a text one time per second without blocking other codes

const unsigned long TIME_INTERVAL = 1000; unsigned long previousMillis; void setup() { Serial.begin(9600); previousMillis = millis(); } void loop() { if (millis() - previousMillis >= TIME_INTERVAL) { previousMillis = millis(); Serial.println("Arduino References"); } }

※ Anmerkungen und Warnungen:

  • Bitte beachte, dass der Rückgabewert für millis() ein unsigned long-Wert ist. Es können logische Fehler auftreten, wenn ein Programmierer versucht, mit kleineren Datentypen (z. B. int) zu rechnen. Sogar mit Vorzeichen versehene long-Werte können auf Fehler stoßen, da ihr Maximalwert die Hälfte des vorzeichenlosen Gegenstücks ist.
  • The return value of millis() function rolls over back to zero after roughly 50 days. If the sketch is intended to run for longer than that, It needs to make sure the rollover does not make the sketch fail. To solve it, write rollover-safe code. Let's compare the two following inequations:
    • millis() >= (previousMillis + TIME_INTERVAL)
    • (millis() - previousMillis) >= TIME_INTERVAL
  • Mathematically, they are equivalent to each other. However, in programming, they are not. That is because the size of storage is unlimited in mathematics while it is limited to 4 bytes in Arduino programming. In programming, when the rollover happens, the first inequation makes the sketch fail while the second inequation does NOT. Therefore:
    • Do NOT use if (millis() >= (previousMillis + TIME_INTERVAL)),
    • Use if(millis() - previousMillis >= TIME_INTERVAL) instead

Siehe Auch

ARDUINO KAUFEMPFEHLUNG

Arduino UNO R3
Arduino Starter Kit
Bitte Beachten: Dies sind Partnerschaftslinks. Wenn Sie die Komponenten über diese Links Kaufen, können wir eine Provision erhalten, ohne weitere Kosten für Sie. Wir Schätzen es.

※ UNSERE BOTSCHAFTEN