micros()

Descrição

Retorna o número de microssegundos 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 70 minutos. Em placas Arduino 16 MHz (ex. UNO e Nano), essa função possui uma resolução de quatro microssegundos (isto é, o número retornado é sempre um múltiplo de quatro). Em placas Arduino 8 MHz (ex. LilyPad), essa função possui uma resolução de oito microssegundos.

Sintaxe

time_us = micros()

Parâmetros

  • Nenhum

Retorna

O número de microssegundos desde que o programa iniciou (unsigned long).

Código de Exemplo

Código de Exemplo 1

O código abaixo imprime o número de microssegundos passados desde que a placa Arduino foi ligada.

unsigned long time_us; void setup() { Serial.begin(9600); } void loop() { Serial.print("Time: "); time_us = micros(); Serial.println(time_us); // 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: 52 Time: 1000220 Time: 2000612 Time: 3001008 Time: 4001404 Time: 5001788 Time: 6002180 Time: 7002568
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 = 1000000; // 1000000us = 1s unsigned long previousMicros; void setup() { Serial.begin(9600); previousMicros = micros(); } void loop() { if (micros() - previousMicros >= TIME_INTERVAL) { previousMicros = micros(); Serial.println("Arduino References"); } }

※ Notas e Advertências:

  • Há 1000 (mil) microssegundos em um milissegundo e 1000000 (um milhão) de microssegundos em um segundo.
  • Please note that the return value for micros() is of type unsigned long, logic errors may occur if a programmer tries to do arithmetic with smaller data types such as int. Even signed long may encounter errors as its maximum value is half that of its unsigned counterpart.
  • The return value of micros() function rolls over back to zero after roughly 71 minutes. 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:
    • micros() >= (previousMicros + TIME_INTERVAL)
    • (micros() - previousMicros) >= 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 (micros() >= (previousMicros + TIME_INTERVAL)),
    • Use if(micros() - previousMicros >= TIME_INTERVAL) instead

Ver Também

ARDUINO BUY RECOMMENDATION

Arduino UNO R3
Arduino Starter Kit
Please note: These are Amazon affiliate links. If you buy the components through these links, We will get a commission at no extra cost to you. We appreciate it.

※ OUR MESSAGES