Faire clignoter deux LED à des rythmes différents sur Arduino sans delay()
Composants nécessaires
- 1 × Arduino UNO
- 2 × LED 5 mm (rouge)
Principe : pourquoi éviter delay() ?
L'utilisation de delay() bloque l'exécution du programme. Pour faire clignoter une LED toutes les 1000 ms et une autre toutes les 500 ms, on peut encore s'en sortir en découpant les délais. Mais dès que les intervalles ne sont plus des multiples simples (ex. 300 ms et 1000 ms), la gestion devient inextricable.
La solution : utiliser millis() pour un chronométrage non bloquant, comme le montre l'exemple BlinkWithoutDelay de l'IDE Arduino.
Code complet
const int ledPin = LED_BUILTIN; // LED intégrée (broche 13)
const int ledPin2 = 12; // Deuxième LED sur broche 12
int ledState = LOW;
int ledState2 = LOW;
unsigned long previousMillis = 0;
unsigned long previousMillis2 = 0;
const long interval = 1000; // 1 seconde
const long interval2 = 300; // 300 ms
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
}
void loop() {
unsigned long currentMillis = millis();
// Première LED : intervalle 1000 ms
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
ledState = (ledState == LOW) ? HIGH : LOW;
digitalWrite(ledPin, ledState);
}
// Deuxième LED : intervalle 300 ms
if (currentMillis - previousMillis2 >= interval2) {
previousMillis2 = currentMillis;
ledState2 = (ledState2 == LOW) ? HIGH : LOW;
digitalWrite(ledPin2, ledState2);
}
}
Schéma de câblage
Connectez l'anode de la deuxième LED à la broche 12 via une résistance 220 Ω, cathode au GND. La LED intégrée (broche 13) ne nécessite aucun composant additionnel.
Points clés à retenir
millis()retourne le temps écoulé depuis le démarrage (en ms).- Chaque tâche possède sa propre variable
previousMilliset soninterval. - Le programme reste réactif : vous pouvez ajouter d'autres capteurs, communications série, etc.
Processus de fabrication
- Protéger l'aluminium contre la corrosion : stratégies d'experts pour une durabilité à long terme
- Maîtriser le Cloud Computing de zéro : Guide pratique pour débutants
- Pourquoi passer de C à C++ peut booster le développement embarqué
- Surveillance température et humidité en temps réel via Web sur Raspberry Pi 4
- Tutoriel IoT débutant : Diffusion de données de température depuis un Raspberry Pi
- Streaming de données de température en temps réel depuis un ppDAQC Pi‑Plate vers InitialState avec un Raspberry Pi headless
- Construire un robot piloté Wi‑Fi avec Raspberry Pi & Smartphone Android
- Comprendre le Contrôle de Délai Verilog : Techniques de Timing et Bonnes Pratiques
- Origines du concept de sciage : des outils anciens aux machines modernes