Deux LED, deux vitesses
Fait partie de la section Gestion du temps sans delay du Journey Arduino de Coddy. Leçon 4 sur 18.
Avec delay(), faire clignoter deux LED à des vitesses différentes est un casse-tête : chaque attente bloque l'autre LED. Avec millis(), c'est facile, car rien n'attend.
Donne à chaque tâche ses propres variables : son propre dernier instant et son propre état. Donne ensuite à chaque tâche son propre if dans loop(). À chaque boucle, chaque tâche vérifie sa propre horloge et n'agit que lorsque son heure est venue :
unsigned long redPrevious = 0;
unsigned long greenPrevious = 0;
void loop() {
unsigned long now = millis();
if (now - redPrevious >= 500) {
redPrevious = now;
// faire basculer la LED rouge
}
if (now - greenPrevious >= 200) {
greenPrevious = now;
// faire basculer la LED verte
}
}Les deux tâches ne se gênent jamais. Tu peux en ajouter une troisième et une quatrième de la même façon : un ensemble de variables et un if pour chacune.
Ne partage jamais une seule variable du dernier instant entre deux tâches. La tâche la plus rapide la réinitialise si souvent que la plus lente n'atteint jamais son intervalle.
Défi
FacileLa LED rouge sur la broche 13 bascule déjà toutes les 500 ms. Fais basculer la LED verte sur la broche 12 toutes les 200 ms en même temps :
- ajoute les variables
greenPreviousetgreenState - ajoute un deuxième
ifdansloop()pour la LED verte
Appuie sur Run et regarde les deux clignoter, puis sur Check.
Essayez vous-même
const int redLed = 13;
const int greenLed = 12;
unsigned long redPrevious = 0;
int redState = LOW;
// ajoutez ici les deux variables de la LED verte
void setup() {
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
}
void loop() {
unsigned long now = millis();
// la LED rouge change d’état toutes les 500 ms
if (now - redPrevious >= 500) {
redPrevious = now;
if (redState == LOW) {
redState = HIGH;
} else {
redState = LOW;
}
digitalWrite(redLed, redState);
}
// faites changer d’état la LED verte toutes les 200 ms ici
}
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
1millis()
L’horloge millis()Les temps en unsigned longFaire clignoter sans délaiDeux LED, deux vitessesFaire clignoter avec un boutonUne lumière avec minuterieEntraînez-vous par vous-même : Playground Arduino