Programmer un Arduino avec un simple clignotement de LED ouvre très vite la porte à l’électronique et aux systèmes embarqués. Derrière ce petit voyant qui s’allume et qui s’éteint, se cachent des notions clés : broches d’E/S, résistances, temporisation, boucle infinie, logique binaire.
En partant du programme LED blink, tu poses les fondations pour piloter des capteurs, des moteurs, des écrans et automatiser ton environnement. En avançant pas à pas, tu verras comment une LED qui clignote se transforme en véritable base de travail pour des projets plus avancés et fiables.
| Élément clé | Synthèse |
| Objectif 🎯 | Découvrir la programmation Arduino via l’allumage et l’extinction d’une LED. |
| Principe | Utiliser une sortie numérique pour contrôler une LED en alternant entre HIGH et LOW avec un délai. |
| Matériel requis | Carte Arduino, LED, résistance (220 Ω), câbles. |
| Code essentiel | Configuration d’une broche en sortie puis boucle faisant clignoter la LED avec des temporisations. |
| Compétence acquise | Compréhension du fonctionnement d’une boucle et du contrôle de broches numériques. |
Comprendre le programme Arduino LED blink avant de coder
Le programme LED blink sert de porte d’entrée à l’univers Arduino. Il met en œuvre la gestion d’une sortie numérique, l’utilisation d’un délai et la logique de boucle infinie. Ce code se retrouve sur quasiment toutes les documentations pour débutants, car il synthétise la philosophie de la plateforme : simplicité d’écriture, lecture claire, exécution en continu.
Sur la plupart des cartes, une LED intégrée est déjà reliée à une broche numérique. Sur une Arduino Uno R3, elle est connectée au port 13 et apparaît en orange. Le programme LED blink agit donc directement sur cette broche, sans câblage externe. Cette configuration permet de tester rapidement que la carte fonctionne, que le câble USB est opérationnel et que le téléversement de programme se déroule correctement.
ArduinoArduino et domotique : automatiser sa maison pour pas cherLe principe reste identique sur Arduino Nano, Leonardo ou Mega 2560. Le microcontrôleur (ATmega328P pour l’Uno, ATmega32U4 pour le Leonardo, etc.) lit le code compilé, puis modifie l’état logique de la broche reliée à la LED. Les fonctions clés du langage Arduino interviennent alors : pinMode() pour configurer le port, digitalWrite() pour envoyer l’état haut ou bas, et delay() pour gérer la durée d’allumage et d’extinction.

Choisir sa carte Arduino pour un premier LED blink
Plusieurs cartes Arduino conviennent pour un programme LED blink. Le comportement du code ne change pas, mais l’environnement matériel, le nombre de broches et les possibilités d’évolution varient. Un choix cohérent dès le départ évite de se sentir limité au moment de connecter davantage de capteurs ou d’actionneurs.
Les modèles les plus utilisés pour commencer tournent autour de l’ATmega328 et de ses variantes : Arduino Uno R3 et Arduino Nano. D’autres, comme Arduino Leonardo ou Arduino Mega 2560 Rev3, conviennent mieux à des systèmes plus denses, riches en entrées et en sorties. Le programme LED blink reste cependant identique, ce qui permet de passer d’une carte à l’autre sans réécrire toute la logique.
| Carte Arduino | Microcontrôleur | Points forts | Usage typique |
|---|---|---|---|
| Arduino Uno R3 | ATmega328P | 14 E/S numériques, 6 PWM, 6 entrées analogiques, LED intégrée sur le port 13, large compatibilité avec shields | Projets généraux, apprentissage, maquettes pédagogiques |
| Arduino Nano | ATmega328 | Format compact, 32 kB de mémoire, facilité d’intégration dans des systèmes embarqués | Montages compacts, intégration sur breadboard, objets connectés minimalistes |
| Arduino Leonardo | ATmega32U4 | Émulation native de périphériques USB, plus d’E/S que l’Uno | Claviers USB, contrôleurs personnalisés, interfaces homme‑machine |
| Arduino Mega 2560 Rev3 | ATmega2560 | Beaucoup de broches E/S, mémoire plus généreuse | Projets avec nombreux capteurs, écrans, boutons et modules |
Matériel nécessaire pour réaliser un LED blink complet
Le programme LED blink fonctionne déjà avec la LED intégrée. Pourtant, pour comprendre le câblage et la gestion de courant, mieux vaut utiliser une LED externe avec une résistance de protection. Ce montage illustre clairement la circulation du courant, le rôle de l’anode, de la cathode et de la masse (GND).
Un kit de base inclut généralement tout le nécessaire pour ce montage. La liste suivante couvre ce qu’il faut pour un exercice propre, extensible vers d’autres expériences électroniques.
- Une carte Arduino compatible (Uno R3, Nano, Leonardo ou Mega 2560 Rev3).
- Un câble USB adapté pour l’alimentation et le transfert du programme.
- Une breadboard pour réaliser un câblage ordonné et modulable.
- Une LED classique (rouge, verte ou autre couleur).
- Une résistance de environ 220 Ω pour limiter le courant sous 5 V.
- Quelques fils de connexion (dupont) pour relier la carte à la breadboard.
Sur une carte alimentée en 5 V, une LED sans résistance risque de subir un courant excessif et de se dégrader rapidement. Une résistance de l’ordre de 220 Ω reste cohérente pour un courant typique autour de 10 à 20 mA, selon la LED utilisée. Ce montage protège également la broche de la carte contre une surcharge.
Câblage détaillé du circuit LED blink
Le schéma de câblage d’un LED blink externe repose sur une structure simple mais fondamentale. Le but consiste à faire circuler le courant depuis la broche numérique configurée en sortie, à travers la résistance, la LED, puis jusqu’à la masse (GND). Ce chemin forme une boucle électrique complète.
Le câblage de base s’organise comme suit : Anode → résistance → broche numérique → microcontrôleur → masse → cathode. Selon le montage, certains choisissent de placer la résistance avant ou après la LED. Sur le plan électrique, la position n’influence pas le courant, tant que la résistance se trouve en série avec la LED.
- Relier la broche numérique 13 (ou une autre broche, par exemple 8) à une extrémité de la résistance de 220 Ω.
- Relier l’autre extrémité de la résistance à l’anode de la LED (patte la plus longue).
- Relier la cathode de la LED (patte la plus courte, côté méplat) à une des rangées connectées à la masse (GND) sur la breadboard.
- Relier ensuite une broche GND de l’Arduino à cette même rangée de masse.
Sur la breadboard, les rangées horizontales ou verticales peuvent être déjà communes selon le modèle. Un repérage attentif des rails de puissance évite les courts-circuits et les inversions anode/cathode. Le respect de la polarité reste essentiel, la LED ne s’allume que dans le sens direct.
« Anode → résistance → LED → cathode → masse » résume le schéma standard. Cette phrase simple s’ancre vite dans les habitudes et aide à structurer le câblage mentalement avant même de connecter les fils.

Structure du code Arduino LED blink expliquée
Le langage Arduino repose sur deux fonctions principales que le programmeur définit : setup() et loop(). Tous les exemples officiels, y compris LED blink, suivent cette structure. Une bonne compréhension de ces deux blocs facilite la lecture de tout projet Arduino, même plus complexe.
La fonction setup() s’exécute une seule fois au démarrage ou après un reset. Elle sert à initialiser la configuration des broches, la communication série, les librairies, etc. La fonction loop() tourne ensuite en continu, tant que la carte reste alimentée. LED blink utilise cette boucle pour alterner l’allumage et l’extinction de la LED, séparés par des délais temporisés.
Exemple de code LED blink standard
Voici un exemple de code LED blink classique pour une LED sur la broche 13 :
int ledPin = 13; // Broche connectée à la LED
void setup() {
pinMode(ledPin, OUTPUT); // Configuration de la broche en sortie
}
void loop() {
digitalWrite(ledPin, HIGH); // LED allumée
delay(1000); // Attente de 1000 ms (1 seconde)
digitalWrite(ledPin, LOW); // LED éteinte
delay(1000); // Attente de 1000 ms (1 seconde)
}
La variable ledPin contient le numéro de la broche utilisée. Cette approche accentue la lisibilité et rend le code plus souple. Si tu décides de déplacer la LED sur une autre broche, il suffit de modifier cette valeur, sans toucher aux autres lignes.
La fonction pinMode(ledPin, OUTPUT) configure la broche en sortie numérique. Les fonctions digitalWrite(ledPin, HIGH) et digitalWrite(ledPin, LOW) imposent respectivement un niveau logique haut (5 V) et bas (0 V). Enfin, delay(1000) fige l’exécution pendant 1000 millisecondes, générant un clignotement régulier.
delay() bloque l’exécution. Pendant la durée d’attente, le microcontrôleur ne traite aucune autre tâche. Pour des montages plus complexes, une approche non bloquante basée sur millis() devient plus adaptée.

Comprendre les notions fondamentales derrière LED blink
LED blink enseigne plus qu’un simple clignotement. Ce programme introduit des concepts centraux de l’électronique numérique et du développement embarqué. Les assimiler à ce stade facilite l’évolution vers des projets plus riches, par exemple la lecture de capteurs ou le pilotage de relais.
Parmi ces notions, on retrouve les états logiques haut/bas, le courant limité par la résistance, la temporisation, mais aussi la répétition infinie d’actions dans une boucle. L’ensemble compose une base solide pour aborder ensuite la lecture analogique, la modulation de largeur d’impulsion (PWM) ou la communication série.
- État haut (HIGH) / bas (LOW) : la broche de sortie adopte une tension de 5 V ou 0 V, correspondant respectivement à un 1 logique ou un 0 logique.
- Courant limité : la résistance série protège la LED et la broche de sortie en limitant le courant.
- Temporisation :
delay()impose une pause mesurée, créant un rythme de clignotement. - Boucle infinie :
loop()s’exécute sans fin, tant que l’alimentation reste active.
Le clignotement d’une LED traduit visuellement une séquence logique : « 1 pendant X millisecondes, puis 0 pendant X millisecondes, et ainsi de suite ». Chaque cycle illustre une forme de chronogramme numérique, dans une version accessible à l’œil humain.
Modifier la vitesse de clignotement et explorer des variantes
Ajuster la valeur de delay() permet de contrôler directement la fréquence de clignotement. Une valeur élevée donne une LED lente, une valeur courte rapproche le rythme du seuil de perception de l’œil humain. Ce simple paramètre offre un terrain d’expérimentation intéressant.
En réduisant progressivement la durée, on observe une transition entre une LED clairement clignotante et une LED qui semble rester allumée en continu. Ce phénomène vient de la persistance rétinienne et de la capacité limitée de l’œil à distinguer des alternances trop rapides.
| Valeur de delay() | Effet perçu | Usage pédagogique |
|---|---|---|
| 1000 ms | Clignotement lent, bien visible | Idéal pour un premier test et pour suivre le programme à l’œil |
| 200 à 500 ms | Clignotement plus rapide | Illustration d’un rythme modéré, comparable à un signal d’alerte visuelle |
| 50 à 100 ms | Clignotement très rapide | Début d’effet de fusion visuelle, utile pour aborder la notion de fréquence |
Varier le rapport cyclique
En modifiant séparément les durées d’allumage et d’extinction, tu obtiens un rapport cyclique asymétrique. Par exemple, une LED allumée 200 ms puis éteinte 800 ms donne une impression de brève impulsion suivie d’une longue pause. Cette notion de rapport cyclique sera précieuse pour la suite, notamment en PWM.
digitalWrite(ledPin, HIGH);
delay(200); // Allumée plus brièvement
digitalWrite(ledPin, LOW);
delay(800); // Éteinte plus longtemps
En ajustant ces durées, tu peux simuler par exemple un signal type SOS, un battement de cœur ou une signalisation spécifique. Chaque motif devient une façon d’encoder de l’information visuelle dans le temps.
Résolution des problèmes fréquents avec LED blink
Certains blocages surviennent régulièrement lors des premiers essais. Une LED qui ne s’allume pas, un port série introuvable, un code qui refuse de se téléverser : ces symptômes ont des causes récurrentes. Une approche méthodique aide à isoler et résoudre chaque source d’erreur.
Les difficultés se répartissent souvent en trois catégories : erreurs de câblage, erreurs de configuration de l’IDE et erreurs de code. Les vérifier une par une simplifie le diagnostic.
- LED inversée : l’anode et la cathode sont permutées, la LED ne s’allume pas.
- Absence de résistance : la LED risque de claquer, voire de solliciter trop la broche.
- Mauvaise broche : le code mentionne la broche 13 mais la LED est câblée sur 8, ou l’inverse.
- Port série incorrect : la carte est branchée, mais l’IDE sélectionne un autre port.
- Mauvais type de carte : l’IDE est réglé sur un modèle différent (par exemple, Mega au lieu d’Uno).
En cas de LED muette, reviens toujours à la base : vérifier la polarité de la LED, la présence de la résistance, la référence de la broche dans le code et la sélection de la carte dans l’IDE. Ce contrôle simple débloque une large part des situations.
Étendre LED blink vers des projets plus avancés
Une fois le clignotement maîtrisé, la logique du programme LED blink s’étend facilement vers des scénarios plus riches. Par exemple, tu peux synchroniser la LED avec la lecture d’un capteur, déclencher un clignotement sur événement, ou piloter plusieurs sorties en parallèle.
ArduinoPiloter un relais 230 V avec Arduino en sécurité : 5 erreurs à éviterL’association d’une LED avec un capteur de température illustre bien cette démarche. Lorsque la température dépasse un seuil, la LED s’allume ou clignote plus vite. La boucle principale combine alors lecture du capteur, décision logique et commande de la sortie.
- LED comme indicateur de seuil (température, lumière, proximité).
- LED utilisée comme témoin d’état d’un système (connexion établie, erreur, activité).
- LED synchronisée avec une action physique (ouverture d’un relais, moteur en marche).
La même logique de digitalWrite() sert ensuite au pilotage de relais, de transistors MOSFET ou de modules de puissance. La LED devient alors un banc d’essai miniature avant de passer à des charges plus contraignantes comme des bandes LED ou des moteurs.
LED blink et bonnes pratiques de programmation Arduino
LED blink constitue un terrain favorable pour adopter quelques réflexes de programmation propres à Arduino. Organiser son code dès ce stade aide beaucoup quand le projet grandit, notamment en présence de plusieurs LED, de capteurs et de fonctions.
L’usage de variables, de constantes et de fonctions personnalisées améliore la lisibilité. Les commentaires bien placés facilitent la relecture après quelques semaines. Ces techniques se mettent en place dès un projet aussi simple qu’un clignotement.
Variables et constantes pour les broches
Déclarer la broche de LED comme constante renforce la clarté :
const int LED_PIN = 13;
Cette approche signale que le numéro de broche ne doit pas changer pendant l’exécution. Elle se répète pour les différentes sorties, capteurs, boutons et permet d’identifier rapidement l’architecture du montage depuis le haut du fichier.
Fonctions dédiées pour allumer ou éteindre
Créer une fonction allumerLed() ou eteindreLed() apporte une couche d’abstraction. La fonction encapsule l’appel à digitalWrite() et permet d’ajouter ultérieurement des vérifications ou des effets spéciaux sans modifier tout le programme.
void allumerLed() {
digitalWrite(LED_PIN, HIGH);
}
void eteindreLed() {
digitalWrite(LED_PIN, LOW);
}
Dans la boucle loop(), le code devient plus expressif : tu lis « allumer », « éteindre », puis les durées. Ce style rend le programme plus proche d’une description de comportement que d’une suite d’instructions brutes.
LED blink non bloquant avec millis() pour aller plus loin
La version classique de LED blink avec delay() convient pour débuter, mais elle bloque l’exécution pendant les temps d’attente. Pour gérer plusieurs tâches en parallèle, une technique basée sur millis() apporte une solution non bloquante. La carte mesure le temps écoulé depuis son démarrage et déclenche des actions quand certains intervalles sont atteints.
Ce type de structure devient précieux lorsqu’un projet combine LED, capteurs, communication série et autres périphériques. La carte surveille plusieurs conditions dans la même boucle sans rester figée sur un délai donné.
const int LED_PIN = 13;
unsigned long previousMillis = 0;
const long interval = 1000; // Intervalle d'une seconde
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
int state = digitalRead(LED_PIN);
digitalWrite(LED_PIN, !state); // Inversion de l'état
}
// Ici, tu peux lire un capteur, gérer un bouton, etc.
}
Avec ce schéma, le programme vérifie régulièrement si l’intervalle souhaité est écoulé, puis inverse l’état de la LED. Le reste du temps, la boucle reste libre pour d’autres tâches. Cette méthode forme la base de nombreux systèmes réactifs basés sur Arduino.
LED blink comme base de la pédagogie Arduino
Dans le contexte pédagogique, LED blink joue un rôle de fil conducteur. Les formateurs l’utilisent pour illustrer les notions de boucle, de variables, de délais, mais aussi de rigueur dans le câblage. Le clignotement visible fournit un retour immédiat, très parlant, même pour un public sans bagage technique.
Les expérimentations autour de ce programme peuvent inclure des activités d’observation, de chronométrage, de modification de code et de commentaire de lignes. L’objectif consiste à instaurer une relation directe entre le code écrit, le comportement de la LED et le raisonnement logique sous-jacent.
Un simple clignotement devient un support de dialogue : « Que se passe-t-il si on divise cette valeur par deux ? », « Pourquoi la LED semble-t-elle rester allumée maintenant ? », « D’où vient cette durée de une seconde ? ». Chaque question renvoie au code et à la compréhension du temps dans un système embarqué.
En associant progressivement la LED à des boutons, des capteurs ou des signaux sonores, l’enseignant montre comment une sortie numérique simple s’intègre dans une chaîne d’information plus étendue. LED blink cesse alors d’être un exercice isolé et devient une brique parmi d’autres dans une architecture plus large.






