Menu
CoddyTech

Medir con micros()

Parte de la sección Temporización sin delay del Journey de Arduino de Coddy. Lección 16 de 18.

millis() cuenta milisegundos enteros, lo que es demasiado impreciso para intervalos cortos: una pulsación de 2.5 ms se leería como 2 o 3. micros() es el mismo tipo de reloj, pero cuenta microsegundos, millonésimas de segundo: 1000 en cada milisegundo.

En el Uno avanza en pasos de 4 microsegundos y también devuelve un unsigned long. Para medir el tiempo de algo, léelo antes y después, y resta:

unsigned long start = micros();
int reading = analogRead(A0);
unsigned long took = micros() - start;
Serial.println(took);   // aproximadamente 110: analogRead() tarda aproximadamente 0.1 ms

Como cuenta tan rápido, micros() se queda sin números mucho antes que millis(): después de unos 70 minutos vuelve a empezar desde 0. Úsalo para intervalos cortos y millis() para cualquier intervalo que dure más de unos minutos.

challenge icon

Desafío

Fácil

Mide cuánto tiempo se mantiene pulsado el botón, en microsegundos:

  • cuando se pulsa el botón, guarda micros() en pressedAt
  • cuando se suelta, imprime micros() - pressedAt

Pulsa Run, pulsa el botón y después Check.

Pruébalo tú mismo

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) {
    // el botón acaba de pulsarse: guarda el momento
  }

  if (!pressed && wasPressed) {
    // el botón acaba de soltarse: imprime cuánto tiempo estuvo pulsado, en microsegundos
  }

  wasPressed = pressed;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Temporización sin delay

Practica por tu cuenta: Playground de Arduino