Bases · 10 min de lecture

Programmation par blocs Arduino : faire clignoter une LED

Programmation par blocs Arduino : brancher une LED avec une résistance de 220 Ω, voir la ligne C++ de chaque bloc, l'effet des 100 ms, puis un feu tricolore.

En programmation par blocs avec Arduino, le premier programme est presque toujours le même : faire clignoter une LED. Dans cet article, on le fait du début à la fin. On branche une LED sur la broche 9 avec une résistance de 220 Ω, on lit un par un les blocs du projet Clignotement d'une LED de BlueGrays et on voit côte à côte en quelle ligne du code C++ téléversé dans la carte chaque bloc se transforme. Tu vas aussi essayer de changer un seul nombre, le 100 du bloc « attendre 100 ms », pour régler la vitesse du clignotement.

Cet article est la partie 2 de la série Des blocs au code. Dans qu'est-ce que la programmation par blocs, on a expliqué ce que sont les blocs et comment ils deviennent du vrai code. Dans la partie suivante, on ajoute un bouton et on découvre le bloc « si » et le if/else.

On ne s'arrête pas à une seule LED. On va faire grandir la même logique pas à pas jusqu'à des programmes qui allument deux LED à tour de rôle, se comportent comme un feu tricolore et clignotent comme un gyrophare de police. Ensuite, tu verras la même idée sur l'ESP32 et sur le Raspberry Pi Pico en MicroPython. À la fin, un tableau récapitule les erreurs que presque tous les débutants font une fois. Tous les projets de cet article sont gratuits dans BlueGrays, blocs et code compris, et tu peux voir tous les projets en blocs classés par plateforme sur la page programmation par blocs.

De quoi as-tu besoin ?

MatérielQuantitéRemarque
Arduino Uno (ou Nano)1Se branche à l'ordinateur en USB
LED 5 mm (la rouge est la plus simple)1Patte longue +, patte courte -
Résistance de 220 Ω1Anneaux : rouge, rouge, marron
Plaque d'essai (breadboard)1Sans soudure
Câbles jumper mâle-mâle2Pour D9 et GND
Ordinateur avec l'Arduino IDE1Pour téléverser le code

Le circuit : brancher la LED sur la broche 9

Une LED a deux pattes et son sens compte. La patte longue est l'anode (+), la courte la cathode (-) ; côté cathode, le boîtier en plastique présente un méplat. Le courant ne circule que de l'anode vers la cathode : si tu la branches à l'envers, il ne se passe rien. Relie la broche 9 de l'Arduino à une extrémité de la résistance de 220 Ω, et l'autre extrémité à la patte longue de la LED. La patte courte va au GND. La résistance limite le courant : des 5 V on retire les quelque 2 V de la LED rouge, il reste 3 V aux bornes de la résistance, et 3 V / 220 Ω font environ 14 mA. C'est confortable pour la LED et sans danger pour la broche de l'Arduino. Tu peux vérifier la valeur pour la couleur de ta LED avec le calculateur de résistance pour LED. Le fonctionnement d'une LED est expliqué dans qu'est-ce qu'une LED, et la façon dont les rangées d'une plaque d'essai sont reliées à l'intérieur dans qu'est-ce qu'une breadboard.

ConnexionArduino Uno (Clignotement d'une LED)ESP32 (Clignotement LED avec ESP32)Raspberry Pi Pico (LED externe)
Patte longue de la LED (anode, +)D9 via 220 ΩGPIO 5 via 220 ΩGP14 via 220 Ω
Patte courte de la LED (cathode, -)GNDGNDGND
Broche dans les blocs et le code95LED_PIN = 14
Attente dans le projet100 ms500 ms0,5 seconde
Tension de la broche5 V3,3 V3,3 V
Ne branche jamais une LED directement sur une broche sans résistance. Sans elle, rien ne limite le courant : la LED éclaire beaucoup trop fort, chauffe et peut griller rapidement, et la broche de l'Arduino peut aussi être endommagée. Si tu as mis la LED à l'envers, pas de panique : elle ne s'allume simplement pas, il suffit de la retourner. Tu trouveras l'emplacement des broches de ta carte dans l'outil Pinout.

Ton premier programme en blocs : Clignotement d'une LED

Une fois le circuit prêt, passons au programme. Ouvre le projet Clignotement d'une LED dans BlueGrays et active Voir en blocs dans la partie code : tu verras les blocs ci-dessous. Il y a sept blocs au total, répartis en deux grands groupes : en haut configuration (une fois), en dessous répéter indéfiniment. Les blocs s'affichent dans la langue de l'application : en français on lit « écrire HAUT sur la broche », en anglais « write HIGH to pin ».

Blocs du projet Clignotement d'une LED : régler la broche 9 en SORTIE dans configuration, puis écrire HAUT, attendre 100 ms, écrire BAS, attendre 100 ms dans répéter indéfiniment
Blocs de Clignotement d'une LED (projet 1) : la broche 9 passe en sortie une seule fois, puis les quatre blocs de répéter indéfiniment tournent sans fin.

Les blocs du groupe configuration (une fois) ne s'exécutent qu'une fois, à la mise sous tension de la carte ou quand tu appuies sur reset. Il n'y a ici qu'un bloc : « régler la broche 9 en SORTIE ». Les broches numériques de l'Arduino peuvent être des entrées ou des sorties. Comme on pilote une LED, on dit à la carte « je vais envoyer du courant par cette broche ». Le groupe répéter indéfiniment démarre quand la configuration est terminée et s'exécute de haut en bas encore et encore tant que la carte est alimentée. Ses quatre blocs allument la LED, attendent 100 millisecondes, l'éteignent et attendent encore 100 millisecondes. Après le dernier bloc, le programme remonte au début et la LED se rallume. Ce qu'on appelle clignoter, c'est simplement ces quatre étapes répétées cinq fois par seconde.

Bloc → ligne C++ : que devient chaque bloc ?

BlocLigne C++Ce qu'il fait
configuration (une fois)void setup() { ... }Exécute son contenu une fois au démarrage
régler la broche 9 en SORTIEpinMode(9,OUTPUT);Met la broche 9 en sortie
répéter indéfinimentvoid loop() { ... }Répète son contenu à l'infini
écrire HAUT sur la broche 9digitalWrite(9,HIGH);Met 5 V sur la broche, la LED s'allume
attendre 100 msdelay(100);Met le programme en pause 0,1 s
écrire BAS sur la broche 9digitalWrite(9,LOW);Met la broche à 0 V, la LED s'éteint
attendre 100 msdelay(100);Reste éteinte 0,1 s
C++ (Arduino IDE)
1// Led Yakma (proje 1): D9'daki LED 100 ms yanar, 100 ms söner
2// LED Blink (project 1): the LED on D9 is on for 100 ms, off for 100 ms
3void setup() {
4  pinMode(9,OUTPUT);     // LED pini çıkış / LED pin as output
5}
6
7void loop() {
8  digitalWrite(9,HIGH);  // LED'i yak / turn the LED on
9  delay(100);            // 100 ms bekle (1000 ms = 1 s) / wait 100 ms (1000 ms = 1 s)
10  digitalWrite(9,LOW);   // LED'i söndür / turn the LED off
11  delay(100);            // 100 ms bekle / wait 100 ms
12}
13

En mettant le tableau à côté du code, tu vois tout ce que les blocs gèrent pour toi. La forme des groupes configuration et répéter indéfiniment correspond aux accolades des fonctions void setup() et void loop() : le groupe dans lequel se trouve un bloc décide entre quelles accolades sa ligne est écrite. Avec les blocs, tu n'as pas à penser au point-virgule à la fin de chaque instruction, aux majuscules et minuscules (pinMode, digitalWrite) ni aux parenthèses. Mais dès que tu modifies toi-même le code dans l'Arduino IDE, ils comptent ; un seul point-virgule oublié suffit à provoquer une erreur de compilation. C'est là tout l'intérêt des blocs : d'abord tu poses la logique du programme, ensuite tu apprends comment cette même logique s'écrit en code.

Que se passe-t-il si tu changes « attendre 100 ms » ?

Le temps d'attente est en millisecondes (ms), et 1000 ms font une seconde. Les deux blocs d'attente du projet sont à 100 ms, donc la LED reste allumée 0,1 seconde et éteinte 0,1 seconde. Un cycle complet dure 200 ms : la LED clignote cinq fois par seconde. Augmente le nombre dans les deux blocs et la LED ralentit ; diminue-le et elle accélère. En dessous d'un certain seuil, l'œil ne distingue plus les clignotements et la LED semble allumée en permanence. Le tableau montre ce que tu verras en changeant les deux attentes :

Blocs d'attenteUn cycle completClignotements par secondeCe que tu vois
10 ms + 10 ms20 ms50Semble allumée en continu, un peu plus faible
100 ms + 100 ms (valeur du projet)200 ms5Clignotement rapide et net
250 ms + 250 ms500 ms2Clignotement facile à suivre
500 ms + 500 ms1 s1Une fois par seconde, rythme calme
1000 ms + 1000 ms2 s0,51 seconde allumée, 1 seconde éteinte
100 ms + 900 ms1 s1Éclair bref, longue obscurité
Les deux blocs d'attente n'ont pas besoin d'être identiques. Mets le premier à 100 et le second à 900 : la LED fait un bref éclair chaque seconde, comme le voyant « en marche » de beaucoup d'appareils. En code, ce sont delay(100); et delay(900);. Changer un nombre et téléverser à nouveau, c'est l'exercice le plus rapide pour comprendre le lien entre blocs et code.

Faire grandir le programme : deux LED, feu tricolore, gyrophare

Si tu sais faire clignoter une LED, tu n'as besoin de rien de nouveau pour en piloter plusieurs : tu répètes les trois mêmes blocs avec d'autres broches. Dans le projet Deux LED clignotant en alternance, deux broches passent en sortie dans la configuration : 8 et 9. Dans répéter indéfiniment viennent « écrire HAUT sur la broche 8 » et « écrire BAS sur la broche 9 », puis « attendre 200 ms ». Ensuite on écrit l'inverse et on attend encore 200 ms. L'astuce : les deux blocs d'écriture s'enchaînent sans attente entre eux, donc les deux LED semblent s'échanger au même instant. Le bloc d'attente décide combien de temps dure chaque état.

Le projet Feu de circulation applique la même idée à trois LED : rouge sur D2, orange sur D3, vert sur D4. Le groupe répéter indéfiniment compte quatre phases qui suivent toutes le même schéma : un bloc écrire HAUT ou BAS pour chacune des trois LED, puis un bloc d'attente. Les blocs d'écriture décident quelle LED reste allumée, le bloc d'attente pendant combien de temps. Plus de blocs ne rend pas le programme plus difficile, seulement plus long. Une version avec bouton piéton, plus proche d'un vrai carrefour, se trouve dans l'article feu tricolore Arduino.

Blocs du projet Feu de circulation : broches 2, 3 et 4 en sortie, blocs écrire HAUT et BAS en quatre phases, attentes de 2000 ms et 300 ms
Blocs du Feu de circulation (projet 3) : chaque phase compte trois blocs d'écriture et un bloc d'attente.
PhaseRouge (D2)Orange (D3)Vert (D4)Attente
1HAUTBASBAS2000 ms (2 s)
2BASHAUTBAS300 ms
3BASBASHAUT2000 ms (2 s)
4BASHAUTBAS300 ms
C++ (Arduino IDE)
1// Trafik Lambası (proje 3) / Traffic Light (project 3)
2void setup() {
3  pinMode(2,OUTPUT);    // Kırmızı / Red
4  pinMode(3,OUTPUT);    // Sarı / Yellow
5  pinMode(4,OUTPUT);    // Yeşil / Green
6}
7
8void loop() {
9  // Kırmızı yanar, 2 s bekle / Red on, wait 2 s
10  digitalWrite(2,HIGH);
11  digitalWrite(3,LOW);
12  digitalWrite(4,LOW);
13  delay(2000);
14  // Sarı yanar, 0,3 s bekle / Yellow on, wait 0.3 s
15  digitalWrite(2,LOW);
16  digitalWrite(3,HIGH);
17  digitalWrite(4,LOW);
18  delay(300);
19  // Yeşil yanar, 2 s bekle / Green on, wait 2 s
20  digitalWrite(2,LOW);
21  digitalWrite(3,LOW);
22  digitalWrite(4,HIGH);
23  delay(2000);
24  // Sarı yanar, sonra başa (kırmızıya) dön / Yellow on, then back to red
25  digitalWrite(2,LOW);
26  digitalWrite(3,HIGH);
27  digitalWrite(4,LOW);
28  delay(300);
29}
30

Dans le projet Gyrophare de police à LED, deux nouveaux types de blocs apparaissent. Le premier est le groupe variables globales (en haut) avec le bloc « déclarer entier (int) delayTime = 60 ». C'est la ligne int delayTime = 60; du code, qui donne un nom au temps de flash. Comme les blocs d'attente utilisent delayTime au lieu d'un nombre, pour changer la vitesse tu modifies seulement le 60, et non quatre blocs séparés. Le second est le bloc vert « répéter 3 fois » : il exécute trois fois les quatre blocs qu'il contient et devient en C++ la boucle for(int i=0;i<3;i++).

Blocs du projet Gyrophare de police à LED : variable delayTime, broches 2 et 3 en sortie, deux blocs répéter 3 fois
Blocs du Gyrophare de police à LED (projet 4) : la LED rouge (D2) flashe trois fois, puis la LED bleue (D3) trois fois.

Faisons le calcul : à chaque flash, la LED rouge est allumée 60 ms et éteinte 60 ms, donc un flash dure 120 ms. Trois flashs font 360 ms, et pareil pour la LED bleue. Un cycle complet dure environ 0,7 seconde. Avec delayTime à 30, ça flashe deux fois plus vite ; à 120, plus lentement. Variables et boucles sont le sujet de la partie 4 de la série ; on les détaille dans « répéter indéfiniment », blocs de comptage et tableaux. Le projet Chenillard à LED, qui fait courir la lumière le long d'une rangée de LED, est l'étape suivante sur ce chemin.

La même idée sur ESP32 et Raspberry Pi Pico

Sur l'ESP32, les blocs sont presque identiques à ceux de l'Arduino, car l'ESP32 se programme lui aussi en C++ avec l'Arduino IDE. Dans le projet Clignotement LED avec ESP32, la LED est sur le GPIO 5 et les blocs d'attente sont à 500 ms. Les lignes de code sont les mêmes : pinMode(5, OUTPUT); digitalWrite(5, HIGH); delay(500);. Les seules différences sont le numéro de broche, les 3,3 V que délivrent les broches de l'ESP32 et le choix d'une carte ESP32 dans l'Arduino IDE. Tout ce que tu apprends sur l'Uno se transpose directement à l'ESP32.

Dans les projets Raspberry Pi Pico, les blocs se traduisent en code MicroPython et leurs noms changent un peu. Dans le projet LED externe sur le Pico, la LED est sur GP14. Le bloc « broche led : GP LED_PIN, SORTIE » correspond à led = Pin(LED_PIN, Pin.OUT), « allumer (on) la broche led » à led.on(), « attendre 0.5 secondes » à time.sleep(0.5), et répéter indéfiniment à la boucle while True:. Attention : en MicroPython, l'attente est en secondes et non en millisecondes ; le delay(500) de l'Arduino devient ici time.sleep(0.5). Pour essayer sans aucun câble, le projet LED intégrée du Pico fait clignoter la LED sur GP25, directement sur la carte ; sur un Pico W, on accède à la LED intégrée avec le nom « LED » au lieu de GP25.

MicroPython
1# Pico harici LED (proje 8163), seri port satırları çıkarıldı
2# Pico external LED (project 8163), serial print lines removed
3from machine import Pin
4import time
5
6LED_PIN = 14                    # GP14, herhangi bir boş GPIO / any free GPIO
7led = Pin(LED_PIN, Pin.OUT)     # pini çıkış yap / set the pin as output
8
9while True:                     # sürekli tekrarla / loop forever
10    led.on()                    # LED'i yak / turn the LED on
11    time.sleep(0.5)             # 0,5 saniye bekle / wait 0.5 s
12    led.off()                   # LED'i söndür / turn the LED off
13    time.sleep(0.5)
14

Erreurs fréquentes et solutions

ErreurSymptômeSolution
LED branchée à l'enversLa LED ne s'allume jamaisPatte longue vers la broche via la résistance, patte courte au GND ; retourne la LED
Pas de résistanceLED trop lumineuse, chauffe, peut griller viteMets une résistance de 220 Ω en série avec la LED
Broche du bloc différente du circuitLe téléversement réussit mais la LED reste éteinteLe 9 du bloc et la D9 câblée doivent correspondre ; change le fil ou le nombre
Deuxième bloc d'attente oubliéLa LED semble toujours alluméeAprès le bloc écrire BAS, il faut aussi un bloc d'attente (delay)
Attente trop courte (ex. 5 ms)La LED paraît fixe et un peu faibleEssaie au moins 50–100 ms
Les deux pattes de la LED dans la même rangée de la plaqueLa LED ne s'allume jamaisPlace les pattes dans des rangées différentes ; les trous d'une même rangée sont reliés à l'intérieur
Mauvaise carte ou mauvais portL'Arduino IDE affiche une erreur de téléversementChoisis la bonne carte et le bon port dans le menu Outils

Pas à pas dans l'application : des blocs à la carte

  1. Dans BlueGrays, ouvre le projet Clignotement d'une LED, qui porte le badge blocs dans la liste des projets. Le filtre permet aussi d'afficher uniquement les projets avec blocs.
  2. En suivant le schéma, place la LED, la résistance de 220 Ω et deux câbles sur la plaque d'essai.
  3. Dans la partie code, active Voir en blocs. Les blocs remplacent le code ; touche l'image pour l'ouvrir en plein écran.
  4. Passe à l'onglet Comprendre les blocs. Le programme y est expliqué pas à pas : chaque étape n'affiche que ses blocs et ce qu'ils font.
  5. Désactive l'interrupteur pour revenir au vrai code, copie-le et colle-le dans l'Arduino IDE. Les blocs ne sont pas téléversés directement dans la carte ; c'est toujours ce code qui y va.
  6. Dans l'Arduino IDE, choisis Arduino Uno comme carte et le bon port, puis clique sur Téléverser. Si l'IDE n'est pas encore installé, l'article installer l'Arduino IDE te guide pas à pas.
  7. Une fois que la LED clignote, remplace les deux lignes delay(100) par delay(1000), téléverse à nouveau et constate la différence par toi-même.

Dans cet article, la LED a toujours clignoté au même rythme ; le programme n'écoutait rien du monde extérieur. L'étape suivante, c'est de laisser la carte prendre des décisions : la partie 3 de la série, le bouton et le bloc « si », présente un programme qui allume la LED quand on appuie sur un bouton, et montre comment ce bloc devient un if/else en C++.

Dans l'application BlueGrays, tu peux consulter Clignotement d'une LED, Deux LED clignotant en alternance, Feu de circulation, Gyrophare de police à LED et les projets LED pour ESP32 et Pico avec leur schéma et leur code, passer à la version en blocs du même programme avec Voir en blocs et lire ce que fait chaque étape avec Comprendre les blocs.

Questions fréquentes

Qu'est-ce que la programmation par blocs Arduino ?

C'est une façon de présenter un programme Arduino sous forme de blocs qui s'emboîtent comme des pièces de puzzle, au lieu de texte. Chaque bloc, comme « écrire HAUT sur la broche 9 » ou « attendre 100 ms », correspond à une ligne du code C++ téléversé dans la carte. Sans points-virgules ni parenthèses, le débutant se concentre d'abord sur la logique du programme.

Comment faire clignoter une LED avec des blocs ?

Place « régler la broche 9 en SORTIE » dans le groupe configuration, puis, dans répéter indéfiniment, « écrire HAUT sur la broche 9 », « attendre 100 ms », « écrire BAS sur la broche 9 » et « attendre 100 ms ». Dans le circuit, la LED est reliée à D9 par une résistance de 220 Ω. Ces blocs deviennent les lignes pinMode, digitalWrite et delay.

Pourquoi ma LED reste allumée au lieu de clignoter ?

Le plus souvent, il manque le bloc d'attente après le bloc écrire BAS. La LED n'est alors éteinte que quelques microsecondes et l'œil ne le remarque pas. Avec des attentes très courtes (par exemple 5 ms), la LED semble aussi allumée en continu ; essaie 100 ms ou plus.

Quelle résistance utiliser pour une LED sur Arduino ?

Sur les broches 5 V d'un Arduino Uno, 220 Ω est le choix le plus courant et laisse passer environ 14 mA dans une LED rouge. 330 Ω convient aussi, avec une LED un peu moins lumineuse. La résistance limite le courant quelle que soit la patte où elle est placée ; l'important est qu'elle soit en série.

Peut-on téléverser les blocs directement dans l'Arduino ?

Non. Les blocs de BlueGrays rendent le programme plus facile à lire et à comprendre ; la carte reçoit toujours le vrai code du projet. Tu le copies dans l'Arduino IDE (dans Thonny pour le Pico) et tu le téléverses depuis là.

Combien de secondes font 1000 ms, et comment changer la vitesse de clignotement ?

1000 millisecondes font 1 seconde. Un nombre plus grand dans les blocs d'attente ralentit la LED, un plus petit l'accélère : avec 100 ms dans les deux blocs, elle clignote 5 fois par seconde, avec 500 ms une fois par seconde. Dans les blocs MicroPython du Pico, le temps s'écrit en secondes : 0.5 correspond à une demi-seconde.

Voir tous les projets
Clignotement d'une LED
#1Débutant

Clignotement d'une LED

Le tout premier bonjour de l'électronique : allumer et éteindre une seule LED. L'Arduino allume et éteint la LED à intervalles très courts, la lumière clignote donc rapidement. Tu vois de la façon la

4.6(188)
1127
Deux LED clignotant en alternance
#2Débutant

Deux LED clignotant en alternance

Deux LED clignotent vite à tour de rôle : quand l'une s'allume, l'autre s'éteint, comme si elles se renvoyaient une balle. L'Arduino garde chaque lumière allumée un cinquième de seconde puis passe à l

4.6(105)
343
Feu de circulation
#3Débutant

Feu de circulation

Une copie miniature du feu tricolore que tu vois chaque jour dans la rue. Le rouge reste allumé deux secondes, l'orange brille un court instant, le vert reste deux secondes, puis on revient au rouge e

4.8(131)
397
Gyrophare de police à LED
#4Débutant

Gyrophare de police à LED

Comme le gyrophare d'une voiture de police : la LED rouge flashe trois fois très vite, puis la bleue flashe trois fois à son tour, et la séquence se répète sans fin. Il te suffit de deux LED et de deu

4.7(103)
258
Chenillard à LED
#5Intermédiaire

Chenillard à LED

Des lumières qui s'allument l'une après l'autre, comme si elles couraient. L'Arduino allume six LED une par une ; chacune brille un court instant puis s'éteint, et la lumière parcourt la rangée du déb

4.6(85)
207
Clignotement LED avec ESP32
#103Débutant

Clignotement LED avec ESP32

Enseigne l'utilisation de base des sorties GPIO avec l'ESP32. Nous obtenons un effet de clignotement en allumant et éteignant une LED à partir de la broche numérique. Version ESP32 du projet blink classique sur Arduino UNO ; les commandes de base de blink dans l'environnement Arduino restent les mêmes, mais le brochage et les niveaux GPIO de 3,3 V de l'ESP32 diffèrent de ceux de l'Arduino UNO.

4.7(37)
99
Feu de circulation ESP32
#107Débutant

Feu de circulation ESP32

Simulation d'un vrai feu de circulation avec 3 LED rouge-jaune-vert. Les temps sont proches de la logique du trafic réel : rouge long, jaune court, vert long. Exemple classique de contrôle séquentiel GPIO.

4.4(21)
44
Allumage d'une LED externe sur le Raspberry Pi Pico (plaque d'essai)
#148Débutant

Allumage d'une LED externe sur le Raspberry Pi Pico (plaque d'essai)

Après la LED intégrée du Pico : connecter une LED externe à la maquette et la contrôler via la broche GP14. Ce projet vous permet d’apprendre comment utiliser n’importe quelle broche GPIO à usage général du Pico en sortie, de comprendre la polarité de la LED (grande patte = anode/+, petite patte = cathode/–) et de découvrir pourquoi une résistance de limitation de courant (220 Ω) est indispensable. Si vous n'installez pas cette résistance, un courant excessif traversera la LED et celle-ci risque

4.5(2)
7