Czas w typie unsigned long
Część sekcji Odmierzanie czasu bez delay() ścieżki Arduino w Coddy. Lekcja 2 z 18.
Zmienna może przechowywać tylko liczby do określonej wartości, zależnej od jej typu. Typ int na płytce Uno przechowuje wartości od -32768 do 32767. Po 32,8 sekundy millis() przekracza tę wartość, a zmienna typu int, która próbuje ją przechować, zawija się do liczby ujemnej.
Typ unsigned nie przechowuje liczb ujemnych, więc może osiągnąć dwukrotnie większą wartość: unsigned int przechowuje wartości od 0 do 65535, czyli około 65 sekund w milisekundach. To nadal za mało.
Typ unsigned long przechowuje wartości od 0 do 4,294,967,295. W milisekundach to ponad 49 dni, a właśnie taki typ zwraca sama funkcja millis(). Za każdym razem przechowuj wartość w zmiennej tego typu:
unsigned long now = millis();
unsigned long startTime = 0;Szkic z nieodpowiednim typem działa przez pół minuty, a potem zaczyna działać nieprawidłowo, więc łatwo przeoczyć ten błąd.
Wyzwanie
ŁatwyTen szkic wyświetla czas raz na sekundę, ale po 32 sekundach wyświetla liczby ujemne. Zmień typ now, aby czas był poprawny przez wiele dni.
Naciśnij Uruchom i poczekaj ponad 33 sekundy, aby zobaczyć błąd, a następnie go napraw i naciśnij Sprawdź.
Spróbuj swoich sił
void setup() {
Serial.begin(9600);
}
void loop() {
int now = millis(); // ten typ jest zbyt mały, by pomieścić wartość czasu: zmień go
Serial.println(now);
delay(1000);
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Odmierzanie czasu bez delay()
1millis()
Zegar millis()Czas w typie unsigned longMiganie bez opóźnieniaDwie diody LED, dwa tempaMiganie podczas przełączania przyciskiemŚwiatło na czas4Precyzyjne odmierzanie czasu
Pomiar za pomocą micros()Gdy licznik millis() się przepełniaStoper z przyciskiemPoćwicz samodzielnie: Edytor online Arduino