Menu
CoddyTech

Tempi in unsigned long

Fa parte della sezione Temporizzazione senza delay del percorso Arduino di Coddy. Lezione 2 di 18.

Una variabile può contenere numeri solo fino a una certa dimensione, stabilita dal suo tipo. Un int su Uno contiene valori da -32768 a 32767. Dopo 32.8 secondi, millis() supera quel limite e un int che cerca di contenerlo torna a un numero negativo.

Un tipo unsigned non ha numeri negativi, quindi arriva al doppio: un unsigned int contiene valori da 0 a 65535, circa 65 secondi in millisecondi. Ancora non basta.

Un unsigned long contiene valori da 0 a 4,294,967,295. In millisecondi sono più di 49 giorni, ed è il tipo che restituisce millis(). Memorizza ogni orario in una variabile di questo tipo:

unsigned long now = millis();
unsigned long startTime = 0;

Uno sketch con il tipo sbagliato funziona per mezzo minuto e poi si comporta in modo errato, quindi è facile non accorgersi del bug.

challenge icon

Sfida

Facile

Questo sketch stampa l’ora una volta al secondo, ma dopo 32 secondi stampa numeri negativi. Cambia il tipo di now in modo che l’ora rimanga corretta per giorni.

Premi Esegui e attendi oltre 33 secondi per vedere il bug, poi correggilo e Verifica.

Provalo tu

void setup() {
  Serial.begin(9600);
}

void loop() {
  int now = millis();   // questo tipo è troppo piccolo per contenere il tempo: cambialo
  Serial.println(now);
  delay(1000);
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Temporizzazione senza delay

Esercitati da solo: Playground Arduino