Menu
CoddyTech

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 ms

Como 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.

challenge icon

Desafio

Fácil

Meça por quanto tempo o botão fica pressionado, em microssegundos:

  • quando o botão for pressionado, armazene micros() em pressedAt
  • 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;
}
quiz iconTeste seus conhecimentos

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