Menu
CoddyTech

Une lumière avec minuterie

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

Une lumière d’escalier s’allume lorsque vous appuyez sur son bouton et s’éteint d’elle-même un peu plus tard. Appuyez de nouveau pendant qu’elle est allumée, et le décompte recommence.

Il faut deux choses : le moment du dernier appui et savoir si la lumière est allumée. Stockez le moment dans un unsigned long lorsque le bouton est enfoncé :

if (digitalRead(buttonPin) == LOW) {
  pressedAt = millis();     // démarrer (ou redémarrer) le chronomètre
  lightOn = true;
  digitalWrite(ledPin, HIGH);
}

Ensuite, à chaque boucle, vérifiez combien de temps s’est écoulé :

if (lightOn && millis() - pressedAt >= onTime) {
  lightOn = false;
  digitalWrite(ledPin, LOW);
}

Les deux parties n’attendent jamais, donc un appui est détecté à tout moment, même lorsque la lumière est déjà allumée. Avec delay(2000) après l’appui, un deuxième appui pendant l’attente serait perdu.

challenge icon

Défi

Facile

Construisez un éclairage d’escalier :

  • une pression allume immédiatement la LED sur la broche 13
  • 2 secondes après la pression, elle s’éteint toute seule
  • une pression pendant qu’elle est allumée relance les 2 secondes

Appuyez sur Run, appuyez quelques fois sur le bouton, puis sur Check.

Essayez vous-même

const int ledPin = 13;
const int buttonPin = 2;
const unsigned long onTime = 2000;   // durée pendant laquelle la lumière reste allumée

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
  // quand le bouton est enfoncé : allumer la LED et mémoriser l’instant

  // quand onTime s’est écoulé depuis cet instant : éteindre la LED
}
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