Die Motoren können über den PWM-Controller gesteuert werden. Die drive(PWM0, PWM1, PWM2, PWM3) Funktion nimmt dabei vier Werte entgegen, die jeweils zwischen 0 und 255 liegen. Hierüber wird die Motorgeschwindigkeit definiert. PWM0 und PWM1 definieren dabei den linken Motor und steuern die Vorwärts- und Rückwärtsbewegung. PWM2 und PWM3 definieren dementsprechend den rechten Motor.
Die zusätzliche Funktion stop() setzt alle Motorbewegungen auf 0 und führt damit ein Bremsmanöver durch.
# Import des micro:bit Moduls
from microbit import *
# Initialisierung der I2C Schnittstelle
i2c.init(freq=400000, sda=pin20, scl=pin19)
# Initialisierung des PWM Controllers
i2c.write(0x70, b'\x00\x01')
i2c.write(0x70, b'\xE8\xAA')
# Motoren mithilfe des PWM Controllers steuern
# PWM0 und PWM1 für den linken und PWM2 und PWM3 für den rechten Motor
def drive(PWM0, PWM1, PWM2, PWM3):
# Wert für PWM Kanal (0-255) an PWM Controller übertragen.
# 0x70 ist die I2C Adresse des Controllers.
# b'\x02 ist das Byte für den PWM Kanal 1.
# Zu dem Byte für den Kanal wird das Byte mit dem PWM Wert zu addiert.
i2c.write(0x70, b'\x02' + bytes([PWM0]))
# Wiederholen des Vorgangs für alle 4 Kanäle
i2c.write(0x70, b'\x03' + bytes([PWM1]))
i2c.write(0x70, b'\x04' + bytes([PWM2]))
i2c.write(0x70, b'\x05' + bytes([PWM3]))
# alle Motoren stoppen
def stop():
drive(0, 0, 0, 0)
# Variablen für die Demo-while-Schleife
speed = 35
direction = "f"
# Demo-Schleife
while True:
# vorwärts fahren
if direction == "f":
speed += 1
drive(speed, 0, speed, 0)
sleep(30)
if speed > 254:
stop()
print("rückwärts")
sleep(1000)
speed = 35
direction = "b"
# rückwärts fahren
elif direction == "b":
speed += 1
drive(0, speed, 0, speed)
sleep(30)
if speed > 254:
stop()
print("links")
sleep(1000)
speed = 35
direction = "l"
# links fahren
elif direction == "l":
speed += 1
drive(0, speed, speed, 0)
sleep(30)
if speed > 254:
stop()
print("rechts")
sleep(1000)
speed = 35
direction = "r"
# rechts fahren
elif direction == "r":
speed += 1
drive(speed, 0, 0, speed)
sleep(30)
if speed > 254:
stop()
print("vorwärts")
sleep(1000)
speed = 35
direction = "f"
# sonst stopp
else:
stop()
print("gestoppt")