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.
Défi
MoyenLe 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()dansstartTimeet 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
}
}
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