122 lines
3.7 KiB
Python
122 lines
3.7 KiB
Python
""" LEGO Liebherr LR 13000 / Xbox Controller / Pybricks
|
|
|
|
Top hub connects to Xbox controller.
|
|
|
|
Bottom hub receives the control data from the top one.
|
|
|
|
Controls:
|
|
Undercarriage
|
|
Left track forward ... Left trigger
|
|
Left track backward ... Left trigger + Button X pushed
|
|
Right track forward ... Right trigger
|
|
Right track backward ... Right trigger + Button A pushed
|
|
The superstructure turning ... Right joystick left / right
|
|
Crane
|
|
The boom raising / lowering ... Left joystick up / down
|
|
The jib raising / lowering ... Left joystick left / right
|
|
The hook raising / lowering ... Right joystick up / down
|
|
The lights on / off ... Button Y
|
|
"""
|
|
|
|
from pybricks.hubs import TechnicHub
|
|
from pybricks.pupdevices import Motor, Light
|
|
from pybricks.parameters import Button, Color, Direction, Port
|
|
from pybricks.tools import wait
|
|
from pybricks.iodevices import XboxController
|
|
|
|
hub = TechnicHub(broadcast_channel=1)
|
|
controller = XboxController()
|
|
boom_motor = Motor(Port.A, positive_direction=Direction.COUNTERCLOCKWISE)
|
|
arm_motor = Motor(Port.B, positive_direction=Direction.COUNTERCLOCKWISE)
|
|
bucket_motor = Motor(Port.C, positive_direction=Direction.CLOCKWISE)
|
|
scoop_motor = Motor(Port.D, positive_direction=Direction.CLOCKWISE)
|
|
|
|
# motors settings
|
|
BOOMSPEED = 1000
|
|
BUCKETSPEED = 100
|
|
ARMSPEED = 1000
|
|
SCOOPSPEED = 1000
|
|
|
|
hub.light.on(Color.GREEN)
|
|
|
|
while True:
|
|
|
|
|
|
# # control of the boom raising and lowering
|
|
# boom_speed = 0
|
|
# horizontal, vertical = controller.joystick_left()
|
|
# if vertical < -20:
|
|
# boom_speed = vertical + 20
|
|
# elif vertical > 20:
|
|
# boom_speed = vertical - 20
|
|
|
|
# boom_motor.run(boom_speed * BOOMSPEED / 80)
|
|
|
|
# # control of the jib raising and lowering
|
|
# bucket_speed = 0
|
|
# horizontal, vertical = controller.joystick_left()
|
|
# if horizontal < -20:
|
|
# bucket_speed = horizontal + 20
|
|
# elif horizontal > 20:
|
|
# bucket_speed = horizontal - 20
|
|
|
|
# bucket_motor.run(bucket_speed * BUCKETSPEED / 80)
|
|
|
|
# # control of arm
|
|
# arm_speed = 0
|
|
# horizontal, vertical = controller.joystick_right()
|
|
# if vertical < -20:
|
|
# arm_speed = vertical + 20
|
|
# elif vertical > 20:
|
|
# arm_speed = vertical - 20
|
|
|
|
# arm_motor.run(arm_speed * ARMSPEED / 80)
|
|
|
|
# # control of scoop
|
|
# scoop_speed = 0
|
|
# horizontal, vertical = controller.joystick_right()
|
|
# if horizontal < -20:
|
|
# scoop_speed = vertical + 20
|
|
# elif horizontal > 20:
|
|
# scoop_speed = vertical - 20
|
|
|
|
# scoop_motor_motor.run(scoop_speed * SCOOPSPEED / 80)
|
|
|
|
# control of the superstructure turning
|
|
rot_speed = 0
|
|
now_pressed = controller.buttons.pressed()
|
|
if controller.button.RIGHT:
|
|
rot_speed = ROTATESPEED
|
|
elif controller.button.LEFT:
|
|
rot_speed = ROTATESPEED * -1
|
|
|
|
|
|
|
|
# left track control
|
|
left_tr_speed = 0
|
|
now_pressed = controller.buttons.pressed()
|
|
if "X" in now_pressed:
|
|
brake, acceleration = controller.triggers()
|
|
if brake > 10:
|
|
left_tr_speed -= brake
|
|
else:
|
|
brake, acceleration = controller.triggers()
|
|
if brake > 10:
|
|
left_tr_speed += brake
|
|
|
|
# right track control
|
|
right_tr_speed = 0
|
|
now_pressed = controller.buttons.pressed()
|
|
if "A" in now_pressed:
|
|
brake, acceleration = controller.triggers()
|
|
if acceleration > 10:
|
|
right_tr_speed -= acceleration
|
|
else:
|
|
brake, acceleration = controller.triggers()
|
|
if acceleration > 10:
|
|
right_tr_speed += acceleration
|
|
|
|
# Set the broadcast data and start broadcasting if not already doing so.
|
|
data = (rot_speed, left_tr_speed, right_tr_speed)
|
|
hub.ble.broadcast(data)
|