Meça com micros()
Parte da seção Temporização sem delay do Journey de Arduino da Coddy. Lição 16 de 18.
millis() conta milissegundos inteiros, o que é impreciso demais para intervalos curtos: um pressionamento de 2.5 ms seria registrado como 2 ou 3. micros() é o mesmo tipo de relógio, mas conta microssegundos, milionésimos de segundo: 1000 deles em cada milissegundo.
No Uno, ele avança em intervalos de 4 microssegundos e também retorna um unsigned long. Para cronometrar algo, leia antes e depois e subtraia:
unsigned long start = micros();
int reading = analogRead(A0);
unsigned long took = micros() - start;
Serial.println(took); // cerca de 110: uma chamada a analogRead() leva cerca de 0.1 msComo conta tão rápido, micros() fica sem números muito antes de millis(): após cerca de 70 minutos, começa novamente do 0. Use-o para intervalos curtos e millis() para qualquer coisa que dure mais do que alguns minutos.
Desafio
FácilMeça por quanto tempo o botão fica pressionado, em microssegundos:
- quando o botão for pressionado, armazene
micros()empressedAt - quando ele for solto, imprima
micros() - pressedAt
Pressione Run, toque no botão e, em seguida, Check.
Experimente você mesmo
const int buttonPin = 2;
bool wasPressed = false;
unsigned long pressedAt = 0;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
bool pressed = digitalRead(buttonPin) == LOW;
if (pressed && !wasPressed) {
// o botão acabou de ser pressionado: registre o momento
}
if (!pressed && wasPressed) {
// o botão acabou de ser solto: imprima por quanto tempo ficou pressionado, em microssegundos
}
wasPressed = pressed;
}
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
Pratique por conta própria: Playground de Arduino