Tempos em unsigned long
Parte da seção Temporização sem delay do Journey de Arduino da Coddy. Lição 2 de 18.
Uma variável só pode armazenar números até um determinado valor, definido pelo seu tipo. Um int no Uno armazena de -32768 a 32767. Após 32.8 segundos, millis() é maior que isso, e um int que tenta armazenar esse valor dá a volta e passa a ser um número negativo.
Um tipo unsigned não tem números negativos, então alcança o dobro: um unsigned int armazena de 0 a 65535, o equivalente a cerca de 65 segundos em milissegundos. Ainda não é suficiente.
Um unsigned long armazena de 0 a 4,294,967,295. Em milissegundos, isso representa mais de 49 dias, e esse é o tipo que o próprio millis() retorna. Armazene cada horário em uma variável desse tipo:
unsigned long now = millis();
unsigned long startTime = 0;Um sketch com o tipo errado funciona por meio minuto e depois dá errado, então é fácil não perceber o bug.
Desafio
FácilEste sketch imprime o tempo uma vez por segundo, mas, depois de 32 segundos, imprime números negativos. Altere o tipo de now para que o tempo continue correto por dias.
Pressione Executar e espere passar de 33 segundos para ver o bug; depois, corrija-o e Verifique.
Experimente você mesmo
void setup() {
Serial.begin(9600);
}
void loop() {
int now = millis(); // este tipo é pequeno demais para armazenar o tempo: troque-o
Serial.println(now);
delay(1000);
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Temporização sem delay
1millis()
O relógio millis()Tempos em unsigned longPiscar sem atrasoDois LEDs, duas velocidadesPiscar enquanto um botão alternaUma luz com temporizadorPratique por conta própria: Playground de Arduino