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 waitgear = 1maxGear = 3steering = Motor(Port.B)driving = Motor(Port.A)driving.control.limits(acceleration=1000)remoteControl = Remote()#steering calibration sequencesteering.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 loopwhile True:#update pressed buttons informationpressed = remoteControl.buttons.pressed()#Handle button presses to switch gearsif (Button.LEFT in pressed) and gear > 1:gear = gear - 1elif (Button.RIGHT in pressed) and gear < maxGear:gear = gear + 1#commands to drive forwards or backwardsif Button.LEFT_PLUS in pressed:driving.run(-(1000/maxGear)*gear)elif Button.LEFT_MINUS in pressed:driving.run(1000/maxGear)gear = 1else:driving.brake()gear = 1#commands to steerif 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
Kommentar veröffentlichen