Objectif : utiliser des capteurs et actionneurs pour transformer la carte microbit en manette pour votre jeu.
La carte microbit est reliée au pc via le port usb. Il faut pour cela trouver le numéro du port série com du pc pour le renseigner dans le programme à exécuter dans thonny.
1) Le capteur d’accélération pour détecter l’inclinaison de la carte dans le plan
Utiliser l’éditeur microbit de capytale pour communiquer avec la carte et obtenir le numéro du port série.
https://capytale2.ac-paris.fr/web/c/fe18-10453811
code python pour le pc
import pygame
import serial
pygame.init()
LARGEUR, HAUTEUR = 800, 500
ecran = pygame.display.set_mode((LARGEUR, HAUTEUR))
pygame.display.set_caption("Pacman piloté par micro:bit")
horloge = pygame.time.Clock()
rectangle = pygame.Rect(0, 0, 80, 60)
rectangle.center = (LARGEUR // 2, HAUTEUR // 2)
vitesse = 280.0
# À adapter selon votre machine :
# Windows : "COM3", "COM4", ...
# Linux : "/dev/ttyACM0"
# macOS : "/dev/cu.usbmodem..."
PORT = "COM11"
BAUDRATE = 115200
ser = serial.Serial(PORT, BAUDRATE, timeout=0.02)
dx, dy = 0, 0
en_cours = True
while en_cours:
dt = horloge.tick(60) / 1000.0
for event in pygame.event.get():
if event.type == pygame.QUIT:
en_cours = False
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
en_cours = False
# lecture des données venant de la micro:bit
if ser.in_waiting:
try:
ligne = ser.readline().decode("utf-8", errors="ignore").strip()
if ";" in ligne:
sx, sy = ligne.split(";")
dx = int(sx)
dy = int(sy)
except:
pass
rectangle.x += int(dx * vitesse * dt)
rectangle.y += int(dy * vitesse * dt)
rectangle.clamp_ip(pygame.Rect(0, 0, LARGEUR, HAUTEUR))
ecran.fill((20, 20, 30))
pygame.draw.rect(ecran, (80, 140, 255), rectangle, border_radius=10)
pygame.display.flip()
ser.close()
pygame.quit()
2) Modification des couleurs avec les boutons A et B
https://capytale2.ac-paris.fr/web/c/c2a1-10453917
PC
import pygame
pygame.init()
import serial
pygame.init()
LARGEUR, HAUTEUR = 800, 500
ecran = pygame.display.set_mode((LARGEUR, HAUTEUR))
pygame.display.set_caption("Rectangle piloté par micro:bit")
horloge = pygame.time.Clock()
rectangle = pygame.Rect(0, 0, 80, 60)
rectangle.center = (LARGEUR // 2, HAUTEUR // 2)
vitesse = 280.0
PORT = "COM11" # à adapter
BAUDRATE = 115200
ser = serial.Serial(PORT, BAUDRATE, timeout=0.02)
dx, dy = 0, 0
couleur = (80, 140, 255) # bleu initial
en_cours = True
while en_cours:
dt = horloge.tick(60) / 1000.0
for event in pygame.event.get():
if event.type == pygame.QUIT:
en_cours = False
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
en_cours = False
if ser.in_waiting:
try:
ligne = ser.readline().decode("utf-8", errors="ignore").strip()
if ligne:
print(ligne) # debug
morceaux = ligne.split(";")
if len(morceaux) == 4:
sx, sy, sa, sb = morceaux
dx = int(sx)
dy = int(sy)
a = int(sa)
b = int(sb)
# la couleur change et reste mémorisée
if a == 1 and b == 1:
couleur = (255, 255, 0) # jaune
elif a == 1:
couleur = (255, 0, 0) # rouge
elif b == 1:
couleur = (0, 255, 0) # vert
except Exception as e:
print("Erreur lecture série :", e)
rectangle.x += int(dx * vitesse * dt)
rectangle.y += int(dy * vitesse * dt)
rectangle.clamp_ip(pygame.Rect(0, 0, LARGEUR, HAUTEUR))
ecran.fill((20, 20, 30))
pygame.draw.rect(ecran, couleur, rectangle, border_radius=10)
pygame.display.flip()
ser.close()
pygame.quit()