Gangschaltung für ferngesteuerte Control+-Fahrzeuge

 Als ich vor ein paar Monaten gezeigt habe, wie man Control+ Fahrzeuge direkt mit der Powered Up Fernbedienung ohne App/Smartphone fernsteuern kann, pybricks sei Dank, gab es eine weitere Bitte. Der Nutzer wollte nicht nur die Maximalgeschwindigkeit fahren, sondern vergleichbar zur Power Functions Zugfernbedienung die Geschwindigkeit einstellen. Also habe ich den Code um eine Gangschaltung, die aus Autos inspiriert ist, erweitert.

Standartmäßig gibt es drei Gänge und die Anschlüsse sind entsprechend des Off-Road Buggys 42124 so belegt, dass an Port B der Lenkmotor hängt und an Port A der Antriebsmotor. Außerdem ist der Antriebsmotor so eingebaut, dass der sich falsch herum drehen muss, um vorwärts zu fahren.

Neben der gewöhnlichen Steuerung über die + und - Tasten der Fernbedienung kann man nun mit den roten Tasten den Gang hoch und runter schalten. Natürlich geht das nur, solange man nicht im maximalen bzw. minimalen Gang ist. Lässt man die vorwärts-Taste los oder fährt man rückwärts, schaltet sich das Fahrzeug automatisch in den ersten Gang zurück.

In dem neuen Code gibt es die Variable gear, die den aktuellen Gang enthält, und maxGear, die die gesamte Anzahl an Gängen enthält. Wenn du mehr Gänge haben möchtest, kannst du also einfach den Wer von maxGear erhöhen. Außerdem wird nun über den Befehl "driving.control.limits" die maximale Beschleunigung des Antriebsmotors eingestellt.

Der Code:

from pybricks.pupdevices import *
from pybricks.parameters import *
from pybricks.tools import wait

gear = 1
maxGear = 3
steering = Motor(Port.B)
driving = Motor(Port.A)
driving.control.limits(acceleration=1000)
remoteControl = Remote()

#steering calibration sequence
steering.run_until_stalled(500)
steering.reset_angle(0)
steering.run_until_stalled(-500)
maxAngle = steering.angle()
steering.run_target(500, (maxAngle/2)+10)
steering.reset_angle(0)

#main loop
while True:
    #update pressed buttons information
    pressed = remoteControl.buttons.pressed()

    #Handle button presses to switch gears
    if (Button.LEFT in pressed) and gear > 1:
        gear = gear - 1
    elif (Button.RIGHT in pressed) and gear < maxGear:
        gear = gear + 1

    #commands to drive forwards or backwards
    if Button.LEFT_PLUS in pressed:
        driving.run(-(1000/maxGear)*gear)
    elif Button.LEFT_MINUS in pressed:
        driving.run(1000/maxGear)
        gear = 1
    else: 
        driving.brake()
        gear = 1

    #commands to steer
    if Button.RIGHT_PLUS in pressed:
        steering.run_target(1000, (maxAngle/2)-5, Stop.HOLD,False)
    elif Button.RIGHT_MINUS in pressed:
        steering.run_target(1000, -((maxAngle/2)-5), Stop.HOLD,False)
    else:
        steering.run_target(1000, 0, Stop.HOLD, False)

    wait(100)

Kommentare