Einfacher Pybricks Code für ferngesteuerte Züge

Es ist relativ einfach, die aktuellen LEGO City Züge mit einer Powered Up Fernsteuerung fernzusteuern. Es reicht, den Hub und die Fernbedienung jeweils über die grüne Taste einzuschalten. Durch mehrmaliges Drücken der Plus-Taste fährt die Lok stufenweise schneller, selbiges ist mit der Lichthelligkeit möglich.
Bei komplexeren Zügen, die einen anderen Motor als den Zugmotor nutzen, funktioniert das leider nicht so gut. Dort dreht der Motor nur so lange, wie die Plus-Taste gedrückt wird und eine Geschwindigkeitssteuerung gibt es auch nicht. Beispiele für solche Züge sind das Krokodil und ein umgebauter Orient Express.

Voraussetzungen

Der Motor muss sich in dem "B" Anschluss des Hubs befinden. Außerdem kann ein optionales Licht in den Anschluss "A" gesteckt sein. Wenn das Licht benutzt werden soll, müssen die ersten beiden Rauten (#-Symbol) in dem Code entfernt werden.
Um den Code auf einem LEGO Hub zu speichern, kann die Pybricks-Website genutzt werden.

Code

from pybricks.hubs import CityHub
from pybricks.pupdevices import DCMotor, Light, Motor, Remote
from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
from pybricks.tools import wait, StopWatch

steps = 10

speed = 0

hub = CityHub()
motor = Motor(Port.B)
remote = Remote()
#light = Light(Port.A)
#light.on(100)

maxSpeed = motor.control.limits()[0] #get maximu Speed of motor (depends on motor type)
#print(maxSpeed)
remote.light.on(Color.GREEN)

while True:
    #check remote control buttons
    #done in while loop because speed has to be "updated" periodically
    buttons = remote.buttons.pressed()
    if Button.LEFT_PLUS in buttons:
        speed = speed + 1
    if Button.LEFT_MINUS in buttons:
        speed = speed - 1
    if Button.LEFT in buttons:
        speed = 0
    if speed > maxSpeed:
        speed = maxSpeed
    if speed < -maxSpeed:
        speed = -maxSpeed
    if Button.CENTER in buttons:
        hub.system.shutdown()
    while buttons:
        buttons = remote.buttons.pressed()
    motor.run(speed*(maxSpeed/steps))


Kommentare