TP micro:bit — Boucles, boutons et pixels
TP micro:bit — Boucles, boutons et pixels
Objectifs cantonaux : ROBO-1, ROBO-2 (rattachés à O1.5, O1.6). Semaine dédoublée (×2, groupes A/B séparés).
Cours complet sur la plateforme Runestone de Cédric Donner : TP micro:bit — bases.
Vous venez de voir la boucle while — c’est justement l’outil qui manquait la semaine dernière pour faire tourner un programme micro:bit en continu.
La boucle infinie sur le micro:bit
▷ À retenir — while True
while True: crée une boucle qui ne s’arrête jamais (True est toujours vrai). C’est exactement ce qu’il faut pour qu’un micro:bit surveille en continu ses capteurs (boutons, accéléromètre) sans jamais s’arrêter tout seul.
from microbit import *
while True:
display.show(Image.HEART)
sleep(1000)
display.show(Image.HEART_SMALL)
sleep(1000)Utiliser les boutons A et B
Le micro:bit possède deux boutons, button_a et button_b.
◈ Syntaxe — Détection des boutons
button_a.was_pressed() # True si le bouton a été enfoncé depuis le dernier appel
button_a.is_pressed() # True si le bouton est enfoncé maintenantfrom microbit import *
display.show(Image.ARROW_W)
sleep(3000) # temps pour appuyer sur le bouton
if button_a.was_pressed():
display.show(Image.HAPPY)
else:
display.show(Image.SAD)Pour surveiller les boutons en continu, on combine while True et if :
from microbit import *
while True:
if button_a.was_pressed():
display.show(Image.HAPPY)
elif button_b.was_pressed():
display.show(Image.SAD)Exercice 1 — was_pressed() vs is_pressed()
Testez les deux programmes suivants et décrivez la différence entre was_pressed() et is_pressed().
from microbit import *
while True:
if button_a.was_pressed():
display.show(Image.HAPPY)
else:
display.show(Image.SAD)
sleep(200)from microbit import *
while True:
if button_a.is_pressed():
display.show(Image.HAPPY)
else:
display.show(Image.SAD)
sleep(200)Allumer un pixel
Un pixel est repéré par ses coordonnées (x, y) : (0, 0) est le coin en haut à gauche.
◈ Syntaxe — Pixels
display.set_pixel(x, y, intensite) # allume la LED (x, y), intensité de 0 (éteint) à 9 (max)
display.get_pixel(x, y) # renvoie l'intensité actuelle de la LED (x, y)from microbit import *
display.set_pixel(2, 2, 9) # LED du milieu, intensité max
display.set_pixel(0, 0, 5) # coin, intensité intermédiaire
display.set_pixel(4, 0, 5)
display.set_pixel(0, 4, 5)
display.set_pixel(4, 4, 5)Exercice 2 — parcourir tout l’écran
En réutilisant la boucle imbriquée for (déjà connue), faites parcourir tout l’écran à un pixel allumé, du haut à gauche au bas à droite :
from microbit import *
x = 0
y = 0
for _ in range(5):
for _ in range(5):
display.set_pixel(x, y, 9)
sleep(200)
display.set_pixel(x, y, 0)
x += 1
x = 0
y += 1Exercice 3 — déplacer un pixel avec les boutons
En combinant while True, if/elif et display.set_pixel, écrivez un programme qui :
- allume un pixel au centre de l’écran,
- le déplace à gauche quand on appuie sur le bouton A,
- le déplace à droite quand on appuie sur le bouton B,
- ne fait rien si le pixel est déjà au bord de l’écran.
! Effacer avant de redessiner
display.clear() éteint toutes les LED. Pensez à effacer l’écran à chaque tour de boucle avant de redessiner le pixel à sa nouvelle position, sinon la trace du pixel reste allumée.
Devoir donné par Cédric
Terminer les exercices boutons/pixels du TP micro:bit.