Menu
CoddyTech

Chronomètre avec bouton

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

Un chronomètre a deux états, en marche et arrêté, et une pression le fait passer de l’un à l’autre. Il mesure le temps de manière sûre : stocke millis() au début, puis soustrais-le à la fin.

if (!running) {
  running = true;
  startTime = millis();
} else {
  running = false;
  Serial.println(millis() - startTime);
}

Le bouton est anti-rebond comme pour le bouton de mode : agis lorsque la lecture change, puis attends 20 ms. Les deux pressions attendent la même durée de 20 ms, donc le temps qui les sépare reste correct.

La LED indique l’état : allumée pendant que le chronomètre fonctionne.

challenge icon

Défi

Moyen

Le bouton est déjà lu et l’anti-rebond est déjà effectué, et onPress() s’exécute une fois à chaque pression. Écris onPress() :

  • si le chronomètre ne fonctionne pas : démarre-le, stocke millis() dans startTime et allume la LED
  • s’il fonctionne : arrête-le, éteins la LED et affiche le temps en millisecondes

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

Essayez vous-même

const int ledPin = 13;
const int buttonPin = 2;

bool wasPressed = false;
bool running = false;
unsigned long startTime = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
}

// Appelée une fois à chaque appui.
void onPress() {
  // à l’arrêt : démarrer, mémoriser l’heure, allumer la LED
  // en cours : arrêter, éteindre la LED, afficher la durée en ms
}

void loop() {
  bool pressed = digitalRead(buttonPin) == LOW;
  if (pressed != wasPressed) {
    if (pressed) {
      onPress();
    }
    wasPressed = pressed;
    delay(20);   // laisser les contacts se stabiliser
  }
}
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