TP6 — Utiliser une machine à états
On souhaite améliorer le système de « clignotant » pour vélo que vous avez (peut-être) réalisé au TP précédent (ce n'est pas grave si vous avez préféré faire un autre TP).
Clignotant de vélo
On souhaite créer un clignotant pour vélo avec deux cartes micro:bit :
- la première carte est placée sur le guidon, et la cycliste peut appuyer sur un des boutons
AouBpour prévenir qu'elle va tourner à gauche ou à droite ; - la seconde carte est accrochée à l'arrière du vélo, et selon la commande de la cycliste, affiche une flèche vers la gauche ou vers la droite pour prévenir les véhicules qui la suivent.
Plus précisément :
- Au départ, les deux cartes n'affichent rien.
- Lorsque le bouton
Aest appuyé, la carte affiche une flèche à gauche, et un message est envoyé à la seconde carte pour qu'elle affiche aussi une flèche à gauche. Cette flèche reste affichée, jusqu'à une nouvelle action sur la première carte :
- encore le bouton
A: les deux cartes n'affichent plus rien ; - bouton
B: les deux cartes affichent une flèche à droite.
- encore le bouton
Le travail va se faire en deux étapes :
- D'abord, nous allons programmer la carte située sur le guidon, sans nous occuper de l'autre (pas de radio).
- Ensuite, nous nous occuperons de la carte à l'arrière.
Guidon
Le graphe suivant représente une machine à état :
- les sommets (appelés ici « états ») représentent l'état actuel de l'écran de la carte (éteint, flèche à gauche, flèche à droite) ;
- les arêtes (appelées ici « transitions ») représentent l'action de l'utilisatrice (bouton A ou bouton B appuyé).
Par exemple :
- la transition A qui va de éteint à gauche signifie : « Si la carte est éteint et que le bouton A est pressé, afficher une flèche à gauche » ;
- la transition B qui va de gauche à droite signifie : « Si la carte affiche une flèche à gauche et que le bouton B est pressé, afficher une flèche à droite » ;
- etc.
- Recopier et compléter le graphe ci-dessus, en remplaçant tous les
?par les bonnes valeurs (vous pouvez déjà prendre la feuille bilan pour cela). - Ouvrez l'activité
CapytaleSNT - TP6 - Machine Guidonavec le code2993-8427222(machine-guidon.py), et complétez le programme avant de le téléverser sur la cartemicro:bit. Il met en œuvre la machine à état que vous venez de compléter.
Si tout fonctionne, l'écran devrait afficher rien du tout, une flèche à gauche ou à droite en fonction, et changer selon le bouton sur lequel vous appuyez.
Arrière
Nous voulons maintenant que les mêmes flèches soient affichées à l'arrière. Pour cela, nous allons reprendre le programme précédent, et à chaque changement d'état, un message va être envoyé par radio pour dire quel est le nouvel état.
Pour le guidon :
Reprendre le programme précédent, et ajoutez les lignes suivantes en début, pour activer la radio.
import radio radio.on() radio.config(channel=7)
À chaque fois que l'état change, ajouter la ligne suivante (complétée correctement) pour envoyer le nouvel état par radio :
radio.send(XXX) # Envoie le nouvel état.
Pour l'arrière :
- Ouvrez l'activité
CapytaleSNT - TP6 - Machine Arrièreavec le code8864-8427252(machine-arriere.py) ; - Complétez-le (remplacez les
XXXpar les valeurs correctes). - Exécutez-le sur une seconde carte à demander à votre professeur
- Ouvrez l'activité
Vérifiez maintenant que les deux cartes interagissent correctement.
Bilan
- Demander puis compléter la fiche bilan de ce TP ;
- Rendez la fiche au professeur qui doit alors valider le fonctionnement de vos programmes ;
- Passez à la partie suivante
Amélioration
Une dernière chose est gênante avec notre clignotant : il ne clignote pas… Nous allons corriger cela.
Il y a plusieurs manières de faire cela. L'une d'entre elle (plus longue) consiste à afficher une flèche, attendre, effacer l'écran, attendre, et recommencer.
from microbit import * for i in range(5): display.show(Image.ARROW_W) sleep(500) display.clear() sleep(500)
Cela fonctionne, mais il y a encore plus rapide !
Lire la partie Animation de la documentation de
micro:bitsur les images.Voici un programme qui fait ouvrir et fermer la bouche à Pac-Man. On remarquera que l'une des deux images vient de la banque intégrées à la
micro:bit, et l'autre a été dessinée « à la main ».from microbit import * bouchefermée = Image( "09990:" "99099:" "99999:" "99999:" "09990:" ) display.show( [Image.PACMAN, bouchefermée], loop=True, )
- Téléverser ce programme sur la carte
micro:bit: ActivitéCapytaleSNT - TP6 - PacManavec le code01b0-8427362; - Modifiez-le pour qu'il alterne entre une flèche, et un écran vide (on créera une image spécifique pour l'écran vide).
- Téléverser ce programme sur la carte
Modifiez vos programmes de la partie précédente pour que la flèche soit animée, et non plus statique.
Bilan :
- Faites appel à votre professeur qui doit compléter votre fiche bilan en validant le fonctionnement du programme.