Zeitwerte in unsigned long
Teil des Abschnitts Timing ohne Delay der Arduino-Journey von Coddy. Lektion 2 von 18.
Eine Variable kann nur Zahlen bis zu einer durch ihren Typ festgelegten Größe speichern. Ein int auf dem Uno reicht von -32768 bis 32767. Nach 32,8 Sekunden ist millis() größer als dieser Wert, und ein int, der versucht, diesen Wert zu speichern, läuft über und wird zu einer negativen Zahl.
Ein unsigned-Typ kennt keine negativen Zahlen und reicht daher doppelt so weit: Ein unsigned int speichert Werte von 0 bis 65535, also etwa 65 Sekunden in Millisekunden. Trotzdem nicht genug.
Ein unsigned long speichert Werte von 0 bis 4.294.967.295. In Millisekunden sind das mehr als 49 Tage, und es ist der Typ, den millis() selbst zurückgibt. Speichere jeden Zeitwert in einer solchen Variable:
unsigned long now = millis();
unsigned long startTime = 0;Eine Skizze mit dem falschen Typ funktioniert eine halbe Minute lang und geht dann schief, sodass der Fehler leicht zu übersehen ist.
Aufgabe
EinfachDieser Sketch gibt einmal pro Sekunde die Zeit aus, aber nach 32 Sekunden gibt er negative Zahlen aus. Ändere den Typ von now, damit die Zeit auch nach Tagen noch stimmt.
Drücke auf Run und warte länger als 33 Sekunden, um den Fehler zu sehen. Behebe ihn dann und klicke auf Check.
Probier es selbst
void setup() {
Serial.begin(9600);
}
void loop() {
int now = millis(); // Dieser Datentyp ist für den Zeitwert zu klein: Ändere ihn
Serial.println(now);
delay(1000);
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Timing ohne Delay
1millis()
Die millis()-UhrZeitwerte in unsigned longBlinken ohne VerzögerungZwei LEDs, zwei GeschwindigkeitenBlinken, während ein Taster umschaltetEin Licht mit ZeitschaltuhrÜbe selbstständig: Arduino-Playground