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 msComme 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.
Défi
FacileMesure la durée pendant laquelle le bouton est maintenu, en microsecondes :
- lorsque le bouton est enfoncé, stocke
micros()danspressedAt - 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;
}
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