radio pour faire communiquer deux micro:bitsCette micro:bit reçoit des messages et les affiche :
from microbit import *
import radio
radio.config(group=8)
radio.on()
while True:
message = radio.receive()
if message:
display.scroll(message)Cette micro:bit envoie des messages selon les boutons pressés :
from microbit import *
import radio
radio.config(group=8)
radio.on()
while True:
if button_a.is_pressed():
sleep(200)
radio.send('hello')
if button_b.is_pressed():
sleep(200)
radio.send('bye')
if pin_logo.is_touched():
sleep(200)
radio.send('Quoi?')Étapes obligatoires pour utiliser la radio :
import radio — importe le module radioradio.config(group=8) — choisit le groupe (0 à 255). Les deux micro:bits doivent avoir le même groupe !radio.on() — active la radioradio.send('texte') — envoie un messageradio.receive() — vérifie si un message est arrivé (retourne None si rien)Une micro:bit contrôle un servo sur l'autre micro:bit via radio :
## dans le fichier main.py de la microbit telecommandée / connectée au servomoteur
from microbit import *
import radio
from Servo import Servo
radio.config(group=8) #choisir un chiffre en commun avec la telecommande
radio.on()
pince = Servo(pin0)
while True:
message = radio.receive()
if message == 'ouvre':
pince.tourne_ralenti(0)
message = ''
elif message == 'ferme':
pince.tourne_ralenti(180)
message = ''
elif message == 'moitmoit':
pince.tourne_ralenti(90)
message = ''## dans le fichier main.py de la microbit qui servira de telecommande
from microbit import *
import radio
radio.config(group=8)
radio.on()
while True:
if button_a.is_pressed():
sleep(200)
radio.send('ouvre')
if button_b.is_pressed():
sleep(200)
radio.send('ferme')
if pin_logo.is_touched():
sleep(200)
radio.send('moitmoit')Les deux micro:bits peuvent envoyer ET recevoir en même temps :
from microbit import *
import radio
radio.config(group=8)
radio.on()
message = ''
while True:
message = radio.receive()
if message:
display.scroll(message)
message = ''
if button_a.is_pressed():
sleep(200)
radio.send('hello')
if button_b.is_pressed():
sleep(200)
radio.send('bye')
if pin_logo.is_touched():
sleep(200)
radio.send('Quoi?')Ce projet utilise tout ce qu'on a appris ! Deux micro:bits jouent au Pierre-Feuille-Ciseaux via la radio. Chaque joueur choisit sa main (Pierre / Feuille / Ciseaux), les cartes échangent les choix et affichent le résultat. Le code utilise la radio, les fonctions, les classes, les conditions et même la synthèse vocale !
from microbit import *
import radio
import music
import speech
radio.config(group=8)
radio.on()
PIERRE = 'p'
FEUILLE = 'f'
CISEAUX = 'c'
main_adversaire = ''
main = ''
score = 0
total_score = 0
def jouer(main_a, main_b):
if main_a == main_b:
return 0
if main_a == PIERRE:
if main_b == FEUILLE:
return -1
elif main_b == CISEAUX:
return 1
elif main_a == FEUILLE:
if main_b == PIERRE:
return 1
elif main_b == CISEAUX:
return -1
elif main_a == CISEAUX:
if main_b == PIERRE:
return -1
elif main_b == FEUILLE:
return 1
def afficher_main(m):
if m == PIERRE:
display.show(Image('01310:'
'14741:'
'37973:'
'14741:'
'01310'))
elif m == FEUILLE:
display.show(Image('09999:'
'09009:'
'09009:'
'09099:'
'09990'))
elif m == CISEAUX:
display.show(Image('90009:'
'09090:'
'00900:'
'09090:'
'09090'))
else:
display.show(Image.CONFUSED)
def clignoter_pixel(x, y):
display.clear()
for i in range(2):
display.set_pixel(x, y, 9)
sleep(200)
display.clear()
sleep(50)
def intro():
speech.say('Hi')
mains = ['p', 'f', 'c']
afficher_main(mains[0])
sleep(300)
clignoter_pixel(0, 2)
afficher_main(mains[1])
sleep(300)
clignoter_pixel(4, 2)
afficher_main(mains[2])
sleep(300)
clignoter_pixel(2, 0)
def clignoter_main(c, m):
for i in range(c + 1):
afficher_main(m)
sleep(300)
display.clear()
sleep(100)
audio.play(Sound.SPRING)
intro()
while True:
while main == '':
main_adversaire = radio.receive()
if button_a.is_pressed():
main = PIERRE
radio.send(main)
afficher_main(main)
if button_b.is_pressed():
main = FEUILLE
radio.send(main)
afficher_main(main)
if pin_logo.is_touched():
main = CISEAUX
radio.send(main)
afficher_main(main)
main_adversaire = radio.receive()
if main_adversaire and main:
radio.send(main)
music.play(music.JUMP_DOWN)
clignoter_main(3, main_adversaire)
score = jouer(main, main_adversaire)
if score == 0:
display.show(Image.ASLEEP)
music.play(music.BADDY)
elif score == 1:
total_score += 1
display.show(Image.HAPPY)
speech.say('YOU WIN')
music.play(music.POWER_UP)
elif score == -1:
display.show(Image.SAD)
music.play(music.WAWAWAWAA)
display.show(total_score)
sleep(2000)
display.clear()
score = 0
main = ''
main_adversaire = ''
intro()Ce programme utilise des concepts avancés :
PIERRE = 'p' — des variables dont on ne change pas la valeurjouer() retourne -1, 0 ou 1 selon le résultatwhile main == '': attend que le joueur choisissemusic.play(music.POWER_UP) joue des mélodiesspeech.say('YOU WIN') synthèse vocale !Utilise l'exemple bidirectionnel pour créer un mini-chat. A envoie "Salut !", B envoie "Ça va ?", logo envoie "Top !". Programme les deux micro:bits de la même façon.
Ajoute d'autres commandes au servo radio : "lent" (tourne très lentement à 90°), "rapide" (tourne directement à 90°), "sweep" (va de 0° à 180° et revient). Modifie la télécommande pour avoir 5 boutons/combinaisons.
Ajoute ces fonctionnalités à MartoCizo : 1) Affiche le score total des deux joueurs en début de partie. 2) Ajoute un timer de 10 secondes — si personne ne choisit, la partie est annulée. 3) Premier à 3 points gagne la partie !