TP micro:bit

La carte micro:bit est un ordinateur à carte unique à processeur ARM conçu par la BBC pour l'éducation informatique au Royaume-Uni.

la carte micro::bit peut se programmer en utilisant plusieurs langages : javascript (blocs ou texte), scratch3, LISP, C++ avec l'environnement Arduino mais aussi MicroPython.

Nous nous intéresserons ici uniquement à la programmation de la carte sous MicroPython.


Pour commencer reliez votre carte micro:bit avec un câble USB à votre ordinateur.

Celui-ci va reconnaître votre carte comme étant une clé USB. La LED orange de votre carte est allumée. Puis sur le site https://python.microbit.org/

Cliquez sur Connect

connect.jpg
editor.jpg

Sélectionnez BBC micro:bit CMSIS-DAP associé puis cliquez sur Connexion.

Tout est prêt à fonctionner !

Voici le code par défaut :

from microbit import * while True: display.scroll('Hello, World!') display.show(Image.HEART) sleep(2000)

display.scroll permet de faire défiler un texte, display.show d’afficher une image et sleep … de mettre en pause (un nombre de millisecondes)

Voici une liste des images intégrées : https://microbit-micropython.readthedocs.io/fr/latest/tutorials/images.html

  1. Supprimez le texte et remplacez le cœur par une image de la liste.

Il est aussi possible de créer des images personnalisées :

display.set_pixel(x, y, n) allume le pixel de coordonnées (x,y) avec intensité n (de 1-9), il est ainsi possible de changer la luminosité des 25 leds de la carte et de créer une image.

On peut aussi utiliser :

croix = Image("30003:" "06060:" "00900:" "06060:" "30003") display.show(croix)
  1. Copiez/collez ce code dans l’éditeur puis flashez le, que constatez vous ?

Répondez sur votre feuille.
  1. Modifiez le code pour obtenir un carré dont les côtés n’auront pas la même luminosité.

Copiez/collez le code suivant dans l’éditeur puis flashez le :

liste = [Image.HEART,Image.HOUSE,Image.XMAS] display.show(liste, loop=True, delay=1000) sleep(2000)
  1. À partir des éléments ci-dessus, construire une animation à partir d’au moins 5 images personnalisées.

Voici un exemple :

# Définition des images c1 = Image("01010:11111:11111:01110:00100") c2 = Image("02020:22222:22222:02220:00200") c3 = Image("03030:33333:33333:03330:00300") c4 = Image("04040:44444:44444:04440:00400") c5 = Image("05050:55555:55555:05550:00500") c6 = Image("06060:66666:66666:06660:00600") c7 = Image("07070:77777:77777:07770:00700") c8 = Image("08080:88888:88888:08880:00800") c9 = Image("09090:99999:99999:09990:00900") # Définition de l'animation battementsCoeur = [c1, c2, c3, c4, c5, c6, c7, c8, c9, c8, c7, c5, c4, c3, c2] # Boucle infinie while True: # Affichage de l'animation (100 millisecondes entre chaque image) display.show(battementsCoeur, delay=100)

Des fonctions permettent de contrôler le bouton A (button_a) et le bouton B (button_b).

button_a.was_pressed() renvoie True si le bouton A a été pressé depuis le démarrage ou depuis le précédent appel de button_a.was_pressed() et False sinon.

  1. Voici un code à compléter :

from microbit import * #positionnement initial au centre x = ... y = ... while True: display.set_pixel(x,y,0) # on éteint le pixel if button_a.was_pressed(): if x ... : # si le pixel n'est pas déjà au bord gauche x = x ... # on le déplace d'une unité vers la gauche if button_b.was_pressed(): if x ... : # si le pixel n'est pas déjà au bord droit x = x ... # on le déplace d'une unité vers la droite display.set_pixel(x,y,9) # on allume le pixel sleep(20)

Le BBC micro:bit est munit d’un accéléromètre. Il mesure le mouvement selon trois axes :

while True: lecture = accelerometer.get_x() if lecture > 20: display.show("D") elif lecture < -20: display.show("G") else: display.show("-")

Copiez/collez ce code dans l’éditeur puis flashez le.

  1. Après avoir observé ce qu’il se passe et en utilisant les indications suivantes, complétez le code ci-dessous qui déplace un point lumineux selon l’inclinaison de la carte.

inclinaison.jpg
from microbit import * x = 2 y = 2 while True: display.set_pixel(x, y, 0) acc_x = accelerometer.get_x() if acc_x > ... : x = 4 elif acc_x > 150: x = ... elif acc_x > -150: x = ... elif acc_x > -450: x = 1 else: x = ... display.set_pixel(x, y, 5) sleep(100)
  1. Il est possible d’utiliser les mêmes propriétés pour l’inclinaison avant/arrière, le code devient  :

from microbit import * x = 2 y = 2 while True: display.set_pixel(x, y, 0) acc_x = accelerometer.get_x() if acc_x > ... : x = 4 elif acc_x > 150: x = ... elif acc_x > -150: x = ... elif acc_x > -450: x = 1 else: x = ... acc_y = accelerometer.get_y() if acc_y > ... : y = 4 elif acc_y > 150: y = ... elif acc_y > -150: y = ... elif acc_y > -450: y = 1 else: y = ... display.set_pixel(x, y, 5) sleep(100)

Bonus 1:

L’instruction accelerometer.was_gesture("shake"): renvoie True si le carte est secouée.

En ajoutant from random import randint au début du programme. L’instruction nb = randint(1, 6) donne un nombre entier aléatoire entre 1 et 6 inclus. Créez un programme qui simule un lancer de dé lorsque la carte est secouée.

Bonus 2 :

Recréez les battements du coeur en utilisant des boucles.