Tiempos en unsigned long
Parte de la sección Temporización sin delay del Journey de Arduino de Coddy. Lección 2 de 18.
Una variable solo puede contener números hasta cierto límite, determinado por su tipo. Un int en el Uno contiene valores de -32768 a 32767. Después de 32.8 segundos, millis() supera ese límite, y un int que intenta contenerlo da la vuelta y se convierte en un número negativo.
Un tipo unsigned no tiene números negativos, así que puede llegar al doble: un unsigned int contiene valores de 0 a 65535, aproximadamente 65 segundos de milisegundos. Aun así, no es suficiente.
Un unsigned long contiene valores de 0 a 4,294,967,295. En milisegundos, eso equivale a más de 49 días, y es el tipo que devuelve millis(). Guarda cada instante en una variable de este tipo:
unsigned long now = millis();
unsigned long startTime = 0;Un sketch con el tipo equivocado funciona durante medio minuto y luego falla, así que es fácil pasar por alto el error.
Desafío
FácilEste sketch imprime la hora una vez por segundo, pero después de 32 segundos imprime números negativos. Cambia el tipo de now para que la hora siga siendo correcta durante días.
Pulsa Run y espera más de 33 segundos para ver el error; luego corrígelo y pulsa Check.
Pruébalo tú mismo
void setup() {
Serial.begin(9600);
}
void loop() {
int now = millis(); // este tipo es demasiado pequeño para almacenar el tiempo: cámbialo
Serial.println(now);
delay(1000);
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Temporización sin delay
1millis()
El reloj millis()Tiempos en unsigned longParpadear sin esperasDos LED, dos velocidadesParpadear mientras un botón cambia de estadoUna luz con temporizadorPractica por tu cuenta: Playground de Arduino