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.
The result on Serial Monitor:
Código de Exemplo 2
Print a text one time per second without blocking other codes
※ 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
- Linguagem : delay()
- Linguagem : delayMicroseconds()
- Linguagem : millis()
※ ARDUINO BUY RECOMMENDATION
Arduino UNO R3 | |
Arduino Starter Kit |