Menu
CoddyTech

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.

challenge icon

Wyzwanie

Łatwy

Ten 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);
}
quiz iconSprawdź się

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()

Poćwicz samodzielnie: Edytor online Arduino