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.
Sfida
FacileQuesto 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);
}
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