Menu
CoddyTech

Mesurer avec micros()

Fait partie de la section Gestion du temps sans delay du Journey Arduino de Coddy. Leçon 16 sur 18.

millis() compte des millisecondes entières, ce qui est trop imprécis pour les durées courtes : une pression de 2,5 ms serait mesurée comme 2 ou 3. micros() est une horloge du même type, mais elle compte les microsecondes, des millionièmes de seconde : il y en a 1000 dans chaque milliseconde.

Sur l’Uno, elle avance par pas de 4 microsecondes et renvoie aussi un unsigned long. Pour mesurer une durée, lisez-la avant et après, puis soustrayez :

unsigned long start = micros();
int reading = analogRead(A0);
unsigned long took = micros() - start;
Serial.println(took);   // environ 110 : un appel à analogRead() prend environ 0.1 ms

Comme elle compte si vite, micros() arrive à court de nombres bien plus tôt que millis() : après environ 70 minutes, elle repart de 0. Utilisez-la pour les courtes durées, et millis() pour tout ce qui dure plus de quelques minutes.

challenge icon

Défi

Facile

Mesure la durée pendant laquelle le bouton est maintenu, en microsecondes :

  • lorsque le bouton est enfoncé, stocke micros() dans pressedAt
  • lorsqu’il est relâché, affiche micros() - pressedAt

Appuie sur Run, appuie sur le bouton, puis sur Check.

Essayez vous-même

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) {
    // le bouton vient d'être enfoncé : mémoriser l'instant
  }

  if (!pressed && wasPressed) {
    // le bouton vient d'être relâché : afficher la durée pendant laquelle il est resté enfoncé, en microsecondes
  }

  wasPressed = pressed;
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Gestion du temps sans delay

Entraînez-vous par vous-même : Playground Arduino