millis()

Descrição

Retorna o número de milissegundos passados desde que a placa Arduino começou a executar o programa atual. Esse número irá sofrer overflow (chegar ao maior número possível e então voltar pra zero), após aproximadamente 50 dias.

Sintaxe

time_ms = millis()

Parâmetros

  • Nenhum

Retorna

O número de milissegundos passados desde que o programa iniciou (unsigned long)

Código de Exemplo

Código de Exemplo 1

O código imprime na porta serial o tempo em milissegundos passado desde que a placa Arduino começou a executar o código em si.

unsigned long time_ms; void setup() { Serial.begin(9600); } void loop() { Serial.print("Time: "); time_ms = millis(); Serial.println(time_ms); // imprime o tempo desde que o programa iniciou delay(1000); // espera um segundo, para não enviar quantidades massivas de dados }

The result on Serial Monitor:

COM6
Send
Time: 0 Time: 999 Time: 1999 Time: 3000 Time: 4000 Time: 5000 Time: 6000 Time: 7001 Time: 8001 Time: 9001
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Código de Exemplo 2

Print a text one time per second without blocking other codes

const unsigned long TIME_INTERVAL = 1000; unsigned long previousMillis; void setup() { Serial.begin(9600); previousMillis = millis(); } void loop() { if (millis() - previousMillis >= TIME_INTERVAL) { previousMillis = millis(); Serial.println("Arduino References"); } }

※ Notas e Advertências:

  • Note que o valor retornado por millis() é unsigned long, erros podem ser gerados se o programador tentar fazer operações matemáticas com outros tipos de dados, como int. Até mesmo o tipo long com sinal pode causar erros, já que seu valor máximo é metade de sua contraparte sem sinal.
  • The return value of millis() function rolls over back to zero after roughly 50 days. If the sketch is intended to run for longer than that, It needs to make sure the rollover does not make the sketch fail. To solve it, write rollover-safe code. Let's compare the two following inequations:
    • millis() >= (previousMillis + TIME_INTERVAL)
    • (millis() - previousMillis) >= TIME_INTERVAL
  • Mathematically, they are equivalent to each other. However, in programming, they are not. That is because the size of storage is unlimited in mathematics while it is limited to 4 bytes in Arduino programming. In programming, when the rollover happens, the first inequation makes the sketch fail while the second inequation does NOT. Therefore:
    • Do NOT use if (millis() >= (previousMillis + TIME_INTERVAL)),
    • Use if(millis() - previousMillis >= TIME_INTERVAL) instead

Ver Também

ARDUINO BUY RECOMMENDATION

Arduino UNO R3
Arduino Starter Kit
Disclosure: Some links in this section are Amazon affiliate links. If you make a purchase through these links, we may earn a commission at no extra cost to you.
Additionally, some links direct to products from our own brand, DIYables.

※ OUR MESSAGES