ropy/twins/rp_maqueen-robot.py

116 lines
4.0 KiB
Python
Executable File

from microbit import *
from machine import *
import music
import radio
###############################################################################
# rp_maqueen-robot.py
# @title: Jumeau Maqueen : Programme de la carte microbit du robot
# @project: Ropy (Blender-EduTech)
# @lang: fr
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>
# @copyright: Copyright (C) 2022 Philippe Roy
# @license: GNU GPL
###############################################################################
# ###############################################################################
# Initialisation
# ###############################################################################
attente_image = Image("00000:00000:00900:00000:00000")
display.show(attente_image) # Témoin de fonctionnement
radio.config(group=1, queue=1, length=8)
radio.on()
# ###############################################################################
# Boucle principale
# ###############################################################################
vitesse = 50
distance = 50
angle = 90
v_avancer = 50
v_tourner = 50
v_tourner_faible = 25
while True:
# Lecture de l'ordre
ordre=radio.receive()
# Avancer
if ordre=="AV":
display.show(Image.ARROW_N)
pin8.write_digital(1) # Led avant gauche
pin12.write_digital(1) # Led avant gauche
i2c.write(0x10, bytearray([0x00, 0x0, v_avancer])) # Moteur gauche
i2c.write(0x10, bytearray([0x02, 0x0, v_avancer])) # Moteur droit
# Reculer
if ordre=="RE":
display.show(Image.ARROW_S)
pin8.write_digital(1) # Led avant gauche
pin12.write_digital(1) # Led avant gauche
i2c.write(0x10, bytearray([0x00, 0x1, v_avancer])) # Moteur gauche
i2c.write(0x10, bytearray([0x02, 0x1, v_avancer])) # Moteur droit
# Gauche
if ordre=="GA":
display.show(Image.ARROW_W)
pin8.write_digital(1) # Led avant gauche
pin12.write_digital(0) # Led avant droit
i2c.write(0x10, bytearray([0x00, 0x0, 0])) # Moteur gauche
i2c.write(0x10, bytearray([0x02, 0x0, v_tourner])) # Moteur droit
# Avancer + gauche
if ordre=="AG":
display.show(Image.ARROW_W)
pin8.write_digital(1) # Led avant gauche
pin12.write_digital(0) # Led avant droit
i2c.write(0x10, bytearray([0x00, 0x0, v_tourner_faible])) # Moteur gauche
i2c.write(0x10, bytearray([0x02, 0x0, v_tourner])) # Moteur droit
# Reculer + gauche
if ordre=="RG":
display.show(Image.ARROW_W)
pin8.write_digital(1) # Led avant gauche
pin12.write_digital(0) # Led avant droit
i2c.write(0x10, bytearray([0x00, 0x1, v_tourner_faible])) # Moteur gauche
i2c.write(0x10, bytearray([0x02, 0x1, v_tourner])) # Moteur droit
# Droite
if ordre=="DR":
display.show(Image.ARROW_E)
pin8.write_digital(0) # Led avant gauche
pin12.write_digital(1) # Led avant droit
i2c.write(0x10, bytearray([0x00, 0x0, v_tourner])) # Moteur gauche
i2c.write(0x10, bytearray([0x02, 0x0, 0])) # Moteur droit
# Avancer + droite
if ordre=="AD":
display.show(Image.ARROW_W)
pin8.write_digital(1) # Led avant gauche
pin12.write_digital(0) # Led avant droit
i2c.write(0x10, bytearray([0x00, 0x0, v_tourner])) # Moteur gauche
i2c.write(0x10, bytearray([0x02, 0x0, v_tourner_faible])) # Moteur droit
# Reculer + droite
if ordre=="RD":
display.show(Image.ARROW_W)
pin8.write_digital(1) # Led avant gauche
pin12.write_digital(0) # Led avant droit
i2c.write(0x10, bytearray([0x00, 0x1, v_tourner])) # Moteur gauche
i2c.write(0x10, bytearray([0x02, 0x1, v_tourner_faible])) # Moteur droit
# Stop
if ordre=="ST":
display.show(attente_image) # Témoin de fonctionnement
pin8.write_digital(0) # Led avant gauche
pin12.write_digital(0) # Led avant droit
i2c.write(0x10, bytearray([0x00, 0x0, 0]))
i2c.write(0x10, bytearray([0x02, 0x1, 0]))
# Cadencement
# sleep(100)