C’est un grand classique dans le monde des micro-contrôleurs de type Arduino, mais aussi des mini ordinateurs équipés de GPIO, comme le Raspberry Pi. C’est normal, puisse qu’en général, on débute en faisant clignoter une LED. Alors, apprendre à contrôler 3 LED à travers un exercice pratique, c’est souvent la suite logique.
Branchement
Je vous propose donc de reproduire le fonctionnement d’un feu tricolore tricolore avec le Micro:Bit. Pour ce branchement, vous avez besoin de 3 LED (rouge, orange et verte). Les plus petites pattes (des LED) sont reliées à une résistance de 220 Ω (environ) et à la borne GND. En ce qui concerne les grandes pattes, la LED rouge est reliée à la borne P0 du Micro:Bit, la LED orange à la borne P1 et la LED verte à la borne 2.

Un branchement très simple qui ne demande que quelques composants de base.

Si vous avez accès à une imprimante 3D, vous pouvez aussi fabriquer un feu tricolore un peu plus réaliste. Les fichiers sont disponibles sur Thingiverse.

Mais le feu tricolore est tellement courant qu’il existe maintenant des modules déjà tout fait.

Cependant, le module le plus adapté (au Micro:Bit) est certainement le « STOP:bit » de Kitronik. Il suffit de le fixer (avec les 5 vis fournies) et vous n’avez plus à vous en préoccuper. Aucun risque de mauvais branchement, de faux contacts ou de court-circuit. Ce qui est beaucoup plus pratique pour animer un atelier avec des enfants.

Ce modèle m’a gentiment été offert par Françoise et Dominique MEURISSE de la boutique MCHobby (et du blog du même nom). Alors, si vous voulez encourager une entreprise familiale qui n’exploite pas son personnel, faites vos achats chez eux. Surtout que vous pouvez bénéficier des conseils de Dominique, un vrai Maker qui teste et sélectionne avec soin les produits qu’il vend (comme mon livre par exemple).
Le feu à 3 états
C’est le système utilisé en France (mais également dans d’autres pays). Une seule couleur est affichée à la fois :
- Feu vert, les voitures peuvent rouler.
- Feu orange (ou jaune), les voitures doivent s’arrêter si c’est possible.
- Feu rouge, les voitures doivent s’arrêter.

Le feu orange s’allume beaucoup moins longtemps que les feux vert et rouge. À part ça, vous pouvez choisir n’importe quelle durée. Mais pour vérifier rapidement le fonctionnement du programme, je vous conseille de ne pas dépasser les 10 secondes. Si vous savez déjà faire clignoter une LED ce programme ne devrait pas vous sembler très compliqué. Mais, il en existe plusieurs variantes :
Programme de base
A chaque étape, on indique l’état des 3 LED, c’est simple et efficace

# Appel de la bibliothèque "microbit"
from microbit import *
# Boucle infinie
while True:
# Feu vert
pin0.write_digital(0)
pin1.write_digital(0)
pin2.write_digital(1)
# Attends 5 secondes
sleep(5000)
# Feu orange
pin0.write_digital(0)
pin1.write_digital(1)
pin2.write_digital(0)
# Attends 1 seconde
sleep(1000)
# Feu rouge
pin0.write_digital(1)
pin1.write_digital(0)
pin2.write_digital(0)
# Attends 5 secondes
sleep(5000)
Version optimisée
Il est possible d’optimiser le code, en s’assurant (au début du programme) que toutes les LED sont éteintes et ensuite en ne modifiant que les LED qui doivent l’être. Ce code est certainement plus élégant, car il évite de demander inutilement l’extinction d’une LED déjà éteinte. Mais pour un programme aussi simple (par rapport à la puissance de calcul du Micro:Bit), ça n’apporte absolument rien.

# Appel de la bibliothèque "microbit"
from microbit import *
pin1.write_digital(0)
pin2.write_digital(0)
# Boucle infinie
while True:
# Feu vert
pin0.write_digital(0)
pin2.write_digital(1)
# Attends 5 secondes
sleep(5000)
# Feu orange
pin2.write_digital(0)
pin1.write_digital(1)
# Attends 1 seconde
sleep(1000)
# Feu rouge
pin1.write_digital(0)
pin0.write_digital(1)
# Attends 5 secondes
sleep(5000)
Une fonction pour simplifier le programme
Une autre solution (d’une approche différente) est d’utiliser une fonction pour éteindre automatiquement toutes les LED et ensuite, allumer seulement la LED désirée.
Les fonctions sont très utiles pour alléger le programme principal et faciliter la lecture, la compréhension et la modification du code. Cela évite aussi de commettre des erreurs en recopiant machinalement des blocs d’instructions (ou des paragraphes).

# Appel de la bibliothèque "microbit"
from microbit import *
# Fonction "Eteindre_tout"
def Eteindre_tout():
pin0.write_digital(0)
pin1.write_digital(0)
pin2.write_digital(0)
# Programme
# Boucle infinie
while True:
# Feu vert
Eteindre_tout()
pin2.write_digital(1)
# Attends 5 secondes
sleep(5000)
# Feu orange
Eteindre_tout()
pin1.write_digital(1)
# Attends 1 seconde
sleep(1000)
# Feu rouge
Eteindre_tout()
pin0.write_digital(1)
# Attends 5 secondes
sleep(5000)
Encore plus de fonctions
Nous pouvons aller plus loin et créer une fonction pour chaque feu. Vous ne trouvez pas le programme beaucoup plus clair ?

# Appel de la bibliothèque "microbit"
from microbit import *
# Fonctions
def Eteindre_tout():
pin0.write_digital(0)
pin1.write_digital(0)
pin2.write_digital(0)
def Feu_rouge():
Eteindre_tout()
pin0.write_digital(1)
def Feu_orange():
Eteindre_tout()
pin1.write_digital(1)
def Feu_vert():
Eteindre_tout()
pin2.write_digital(1)
# Programme
# Boucle infinie
while True:
# Feu vert
Feu_vert()
# Attends 5 secondes
sleep(5000)
# Feu orange
Feu_orange()
# Attends 1 seconde
sleep(1000)
# Feu rouge
Feu_rouge()
# Attends 5 secondes
sleep(5000)
Ce ne sont que quelques exemples. C’est à vous choisir votre style de code en fonction de votre logique de pensée. Le plus important est de réfléchir et de trouver une solution (qui fonctionne).
Le feu à 4 états
Dans certains pays (comme la Suisse, l’Allemagne ou le Royaume-uni), le feu tricolore passe par 4 étapes :
- Feu vert, les voitures peuvent rouler.
- Feu jaune (ou orange), les voitures doivent s’arrêter si c’est possible.
- Feu rouge, les voitures doivent s’arrêter.
- Feux rouge et orange (ou jaune) allumés en même temps, les voitures se préparent à démarrer.

Mais cette fois ci, je ne vais pas vous fournir le programme. Vous avez tous les éléments pour le faire vous-même. Alors à vous de jouer. Codez, testez, débuggez, améliorez et surtout amusez-vous bien…

Cet article a été publié en juillet 2019 dans le magazine Officiel PC – Raspberry Pi (N°11).
Suggestion pour corser le jeu : Carrefour à l’indonésienne avec voies de stockage. On peut y ajouter aussi des voies pour trams 😉 sans oublier les passages piétons.
http://coachcode.e-monsite.com/pages/la-conduite/content/etape-2-de-la-conduite/les-feux-tricolore.html
J’aimeAimé par 1 personne
Voilà de très bonnes idées, merci Jean-paul.
J’aimeJ’aime
C’est bien pour apprendre à mes élèves de programmer en Python
Ou peut-on acheter ce matériel?
Merci
J’aimeJ’aime
Bonjour,
Vous pouvez le trouver à cette adresse :
https://shop.mchobby.be/fr/microbit/1591-feu-tricolore-pour-microbit-3232100015913-kitronik.html
Bonne soirée
J’aimeJ’aime
Love thiss
J’aimeAimé par 1 personne