initial
This commit is contained in:
62
42100/LR13000-XboxController/LR13000_bottom_hub_04.py
Normal file
62
42100/LR13000-XboxController/LR13000_bottom_hub_04.py
Normal file
@@ -0,0 +1,62 @@
|
||||
""" 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(observe_channels=[1])
|
||||
superstr_motor = Motor(Port.B, positive_direction=Direction.COUNTERCLOCKWISE)
|
||||
left_motor = Motor(Port.C, positive_direction=Direction.CLOCKWISE)
|
||||
right_motor = Motor(Port.D, positive_direction=Direction.COUNTERCLOCKWISE)
|
||||
|
||||
# motors settings
|
||||
LEFT_TRACK_SPEED = 800
|
||||
RIGHT_TRACK_SPEED = 800
|
||||
ROTATESPEED = 240 # motor speed to turn the crane superstructure
|
||||
|
||||
while True:
|
||||
|
||||
# Receive broadcast from the other hub.
|
||||
data = hub.ble.observe(1)
|
||||
|
||||
if data is None:
|
||||
# No data has been received in the last 1 second.
|
||||
hub.light.on(Color.RED)
|
||||
else:
|
||||
# Data was received and is less that one second old.
|
||||
hub.light.on(Color.GREEN)
|
||||
|
||||
# *data* contains the same values in the same order
|
||||
# that were passed to hub.ble.broadcast() on the
|
||||
# other hub.
|
||||
rot_speed, left_tr_speed, right_tr_speed = data
|
||||
|
||||
# control of the superstructure turning
|
||||
superstr_motor.run(rot_speed * ROTATESPEED / 80)
|
||||
|
||||
# left track control
|
||||
left_motor.run(left_tr_speed * LEFT_TRACK_SPEED / 100)
|
||||
|
||||
# right track control
|
||||
right_motor.run(right_tr_speed * RIGHT_TRACK_SPEED / 100)
|
||||
|
||||
124
42100/LR13000-XboxController/LR13000_top_hub_04.py
Normal file
124
42100/LR13000-XboxController/LR13000_top_hub_04.py
Normal file
@@ -0,0 +1,124 @@
|
||||
""" 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)
|
||||
hook_motor = Motor(Port.B, positive_direction=Direction.COUNTERCLOCKWISE)
|
||||
jib_motor = Motor(Port.D, positive_direction=Direction.CLOCKWISE)
|
||||
light = Light(Port.C)
|
||||
|
||||
# motors settings
|
||||
BOOMSPEED = 700
|
||||
JIBSPEED = 700
|
||||
HOOKSPEED = 800
|
||||
|
||||
light.off()
|
||||
light_on = False
|
||||
|
||||
hub.light.on(Color.GREEN)
|
||||
|
||||
while True:
|
||||
|
||||
# Lights on/off
|
||||
now_pressed = controller.buttons.pressed()
|
||||
if "Y" in now_pressed:
|
||||
if light_on:
|
||||
light.off()
|
||||
light_on = False
|
||||
wait(10)
|
||||
else:
|
||||
light.on(100)
|
||||
light_on = True
|
||||
wait(10)
|
||||
while "Y" in controller.buttons.pressed(): # wait until released
|
||||
wait(10)
|
||||
|
||||
# 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
|
||||
jib_speed = 0
|
||||
horizontal, vertical = controller.joystick_left()
|
||||
if horizontal < -20:
|
||||
jib_speed = horizontal + 20
|
||||
elif horizontal > 20:
|
||||
jib_speed = horizontal - 20
|
||||
|
||||
jib_motor.run(jib_speed * JIBSPEED / 80)
|
||||
|
||||
# control of the hook raising and lowering
|
||||
hook_speed = 0
|
||||
horizontal, vertical = controller.joystick_right()
|
||||
if vertical < -20:
|
||||
hook_speed = vertical + 20
|
||||
elif vertical > 20:
|
||||
hook_speed = vertical - 20
|
||||
|
||||
hook_motor.run(hook_speed * HOOKSPEED / 80)
|
||||
|
||||
# control of the superstructure turning
|
||||
rot_speed = 0
|
||||
horizontal, vertical = controller.joystick_right()
|
||||
if horizontal < -20:
|
||||
rot_speed = horizontal + 20
|
||||
elif horizontal > 20:
|
||||
rot_speed = horizontal - 20
|
||||
|
||||
# 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)
|
||||
Reference in New Issue
Block a user