Menu
CoddyTech

Misurare con micros()

Fa parte della sezione Temporizzazione senza delay del percorso Arduino di Coddy. Lezione 16 di 18.

millis() conta millisecondi interi, una granularità troppo grossolana per intervalli brevi: una pressione di 2.5 ms verrebbe letta come 2 o 3. micros() è lo stesso tipo di orologio, ma conta i microsecondi, milionesimi di secondo: ce ne sono 1000 in ogni millisecondo.

Sull'Uno avanza a intervalli di 4 microsecondi e restituisce anche un unsigned long. Per cronometrare qualcosa, leggilo prima e dopo, quindi sottrai:

unsigned long start = micros();
int reading = analogRead(A0);
unsigned long took = micros() - start;
Serial.println(took);   // circa 110: una chiamata a analogRead() richiede circa 0.1 ms

Dato che conta così velocemente, micros() esaurisce i numeri molto prima di millis(): dopo circa 70 minuti riparte da 0. Usalo per intervalli brevi e millis() per qualsiasi intervallo più lungo di qualche minuto.

challenge icon

Sfida

Facile

Misura per quanto tempo il pulsante viene tenuto premuto, in microsecondi:

  • quando il pulsante viene premuto, memorizza micros() in pressedAt
  • quando viene rilasciato, stampa micros() - pressedAt

Premi Esegui, tocca il pulsante, poi Verifica.

Provalo tu

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: recuerda el momento
  }

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

  wasPressed = pressed;
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Temporizzazione senza delay

Esercitati da solo: Playground Arduino