Examples

Hub Outputs

Status Light

 1from pybricks.hubs import PrimeHub
 2from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
 3from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
 4from pybricks.robotics import DriveBase
 5from pybricks.tools import wait, StopWatch
 6
 7# --- SETUP
 8# start components
 9hub = PrimeHub()
10
11# store variables
12
13# --- RUNNING
14while True:
15    # read sensor data
16
17    # process data
18
19    # output data
20    hub.light.on(Color.MAGENTA)
21    wait(1000)
22    hub.light.blink(Color.RED, [500,250,500,250])
23    wait(1500)
24    hub.light.animate([Color.GREEN, Color.WHITE, Color.ORANGE],1000)
25    wait(3000)
26    hub.light.off()
27    wait(1000)

Light Matrix

 1from pybricks.hubs import PrimeHub
 2from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
 3from pybricks.parameters import Button, Color, Direction, Port, Side, Stop, Icon
 4from pybricks.robotics import DriveBase
 5from pybricks.tools import wait, StopWatch
 6
 7# --- SETUP
 8# start components
 9hub = PrimeHub()
10
11# store variables
12
13# --- RUNNING
14while True:
15    # read sensor data
16
17    # process data
18
19    # output data
20    hub.display.orientation(Side.RIGHT)
21    hub.display.icon(Icon.UP)
22    wait(250)
23    hub.display.orientation(Side.BOTTOM)
24    hub.display.icon(Icon.UP)
25    wait(250)
26    hub.display.orientation(Side.LEFT)
27    hub.display.icon(Icon.UP)
28    wait(250)
29    hub.display.orientation(Side.TOP)
30    hub.display.icon(Icon.UP)
31    wait(250)
32
33    hub.display.off()
34    wait(500)
35
36    hub.display.pixel(1,1,100)
37    hub.display.pixel(1,3,100)
38    hub.display.pixel(3,1,100)
39    hub.display.pixel(3,2,100)
40    hub.display.pixel(3,3,100)
41    wait(1000)
42
43    hub.display.off()
44    wait(500)
45
46    arrows = [Icon.RIGHT, Icon.DOWN, Icon.LEFT, Icon.UP]
47    hub.display.animate(arrows, 500)
48    wait(1000)
49
50    hub.display.off()
51    wait(500)
52
53    hub.display.char("R")
54    wait(500)
55    hub.display.number(2)
56    wait(500)
57    hub.display.char("D")
58    wait(500)
59    hub.display.number(2)
60    wait(500)
61
62    hub.display.off()
63    wait(1000)
64
65    hub.display.text("C3PO", 500, 50)
66
67    hub.display.off()
68    wait(2000)

Speaker

 1from pybricks.hubs import PrimeHub
 2from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
 3from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
 4from pybricks.robotics import DriveBase
 5from pybricks.tools import wait, StopWatch
 6
 7# --- SETUP
 8# start components
 9hub = PrimeHub()
10
11# store variables
12
13# --- RUNNING
14while True:
15    # read sensor data
16
17    # process data
18
19    # output data
20    hub.speaker.volume(100)
21    current_volume = str(hub.speaker.volume())
22    hub.display.text(current_volume)
23    hub.speaker.beep(440,500)
24    
25    hub.speaker.volume(50)
26    current_volume = str(hub.speaker.volume())
27    hub.display.text(current_volume)
28    hub.speaker.beep(440,500)
29    
30    oh_when_the_saints = [
31        "C4/4", "E4/4", "F4/4", "G4/1",
32        "C4/4", "E4/4", "F4/4", "G4/1",
33        "C4/4", "E4/4", "F4/4", "G4/2",
34        "E4/2", "C4/2", "E4/2", "D4/1",
35        "E4/4", "E4/4", "D4/4", "C4/2",
36        "C4/2", "E4/2", "G4/4", "G4/4", "G4/4", "F4/1",
37        "E4/4", "F4/4", "G4/2", "E4/2", "C4/2", "D4/2", "C4/1"
38    ]
39
40    hub.speaker.play_notes(oh_when_the_saints,180)

Motor Output

Motors Running Forever

 1from pybricks.hubs import PrimeHub
 2from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
 3from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
 4from pybricks.robotics import DriveBase
 5from pybricks.tools import wait, StopWatch
 6
 7# --- SETUP
 8# start components
 9hub = PrimeHub()
10left_motor = Motor(Port.E, Direction.CLOCKWISE)
11right_motor = Motor(Port.F, Direction.COUNTERCLOCKWISE)
12
13# store variables
14
15# --- RUNNING
16while True:
17    # read sensor data
18
19    # process data
20
21    # output data
22    left_motor.run(1000)
23    right_motor.run(1000)
24    wait(1000)
25
26    left_motor.dc(50)
27    right_motor.dc(50)
28    wait(1000)

Motors Stopping

 1from pybricks.hubs import PrimeHub
 2from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
 3from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
 4from pybricks.robotics import DriveBase
 5from pybricks.tools import wait, StopWatch
 6
 7# --- SETUP
 8# start components
 9hub = PrimeHub()
10left_motor = Motor(Port.E, Direction.CLOCKWISE)
11right_motor = Motor(Port.F, Direction.COUNTERCLOCKWISE)
12
13# store variables
14
15# --- RUNNING
16while True:
17    # read sensor data
18
19    # process data
20
21    # output data
22    hub.light.on(Color.GREEN)
23
24    left_motor.dc(100)
25    right_motor.dc(100)
26    wait(1000)
27    
28    left_motor.stop()
29    right_motor.stop()
30    wait(500)
31
32    hub.light.on(Color.ORANGE)
33
34    left_motor.dc(100)
35    right_motor.dc(100)
36    wait(1000)
37    
38    left_motor.brake()
39    right_motor.brake()
40    wait(500)
41
42    hub.light.on(Color.VIOLET)
43
44    left_motor.dc(100)
45    right_motor.dc(100)
46    wait(1000)
47    
48    left_motor.hold()
49    right_motor.hold()
50    wait(500)

Motor Fixed Amount

 1from pybricks.hubs import PrimeHub
 2from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
 3from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
 4from pybricks.robotics import DriveBase
 5from pybricks.tools import wait, StopWatch
 6
 7# --- SETUP
 8# start components
 9hub = PrimeHub()
10left_motor = Motor(Port.E, Direction.CLOCKWISE)
11right_motor = Motor(Port.F, Direction.COUNTERCLOCKWISE)
12
13# store variables
14
15# --- RUNNING
16while True:
17    # read sensor data
18
19    # process data
20
21    # output data
22    hub.light.on(Color.BROWN)    
23    
24    left_motor.run_time(1000, 1000, Stop.COAST)
25    right_motor.run_time(1000, 1000, Stop.COAST)
26
27    hub.light.on(Color.VIOLET)
28
29    left_motor.run_angle(1000, 180)
30    right_motor.run_angle(1000, 180)
31
32    hub.light.on(Color.CYAN)
33
34    left_motor.reset_angle(0)
35    right_motor.reset_angle(0)
36    left_motor.run_target(1000, 180)
37    right_motor.run_target(1000, 180)
38
39    hub.light.on(Color.GRAY)
40
41    left_motor.reset_angle(0)
42    right_motor.reset_angle(0)
43    left_motor.track_target(180)
44    right_motor.track_target(180)
45
46    wait(1000)

Drive Base

Drive Base Setup

 1from pybricks.hubs import PrimeHub
 2from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
 3from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
 4from pybricks.robotics import DriveBase
 5from pybricks.tools import wait, StopWatch
 6
 7# --- SETUP
 8# start components
 9hub = PrimeHub()
10
11left_motor = Motor(Port.E, Direction.CLOCKWISE)
12right_motor = Motor(Port.F, Direction.COUNTERCLOCKWISE)
13my_robot = DriveBase(left_motor, right_motor, wheel_diameter=56, axle_track=80)

Driving Forever

 1from pybricks.hubs import PrimeHub
 2from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
 3from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
 4from pybricks.robotics import DriveBase
 5from pybricks.tools import wait, StopWatch
 6
 7# --- SETUP
 8# start components
 9hub = PrimeHub()
10
11left_motor = Motor(Port.E, Direction.CLOCKWISE)
12right_motor = Motor(Port.F, Direction.COUNTERCLOCKWISE)
13my_robot = DriveBase(left_motor, right_motor, wheel_diameter=56, axle_track=80)
14
15# store variables
16
17# --- RUNNING
18while True:
19    # read sensor data
20
21    # process data
22
23    # output data
24    hub.light.on(Color.WHITE)
25    my_robot.drive(1000, 0)
26    wait(500)
27
28    hub.light.on(Color.RED)
29    my_robot.drive(1000, -300)
30    wait(500)
31
32    my_robot.stop()
33    wait(1000)
34
35    hub.light.on(Color.WHITE)
36    my_robot.drive(1000, 0)
37    wait(500)
38
39    hub.light.on(Color.GREEN)
40    my_robot.drive(1000, 300)
41    wait(500)
42
43    my_robot.stop()
44    wait(1000)

Driving Fixed

 1from pybricks.hubs import PrimeHub
 2from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
 3from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
 4from pybricks.robotics import DriveBase
 5from pybricks.tools import wait, StopWatch
 6
 7# --- SETUP
 8# start components
 9hub = PrimeHub()
10
11left_motor = Motor(Port.E, Direction.CLOCKWISE)
12right_motor = Motor(Port.F, Direction.COUNTERCLOCKWISE)
13my_robot = DriveBase(left_motor, right_motor, wheel_diameter=56, axle_track=80)
14
15# store variables
16
17# --- RUNNING
18while True:
19    # read sensor data
20    
21    # process data
22    
23    # output data
24    hub.light.on(Color.YELLOW)
25    my_robot.settings(200, 200, 200, 200)
26    print(my_robot.settings())
27    my_robot.straight(200)
28    my_robot.turn(90)
29    my_robot.curve(100,180)
30
31    hub.light.on(Color.MAGENTA)
32    my_robot.settings(500, 500, 500, 500)
33    print(my_robot.settings())
34    my_robot.straight(200)
35    my_robot.turn(90)
36    my_robot.curve(100,180)

Hub Inputs

Buttons

 1# buttons.py
 2
 3from pybricks.hubs import PrimeHub
 4from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
 5from pybricks.parameters import Button, Color, Direction, Port, Side, Stop, Icon
 6from pybricks.robotics import DriveBase
 7from pybricks.tools import wait, StopWatch
 8
 9# --- SETUP
10# start components
11hub = PrimeHub()
12
13# store variables
14
15# --- RUNNING
16while True:
17    # read sensor data
18    pressed = hub.buttons.pressed()
19    
20    # process data
21
22    # output data
23    if Button.LEFT in pressed:
24        hub.display.icon(Icon.ARROW_LEFT)
25    elif Button.RIGHT in pressed:
26        hub.display.icon(Icon.ARROW_RIGHT)
27    elif Button.CENTER in pressed:
28        hub.display.icon(Icon.CIRCLE)
29    elif Button.BLUETOOTH in pressed:
30        hub.display.char("B")
31    else:
32        hub.display.off()

IMU Orientation

 1from pybricks.hubs import PrimeHub
 2from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
 3from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
 4from pybricks.robotics import DriveBase
 5from pybricks.tools import wait, StopWatch
 6
 7# --- SETUP
 8# start components
 9hub = PrimeHub()
10
11# store variables
12
13# --- RUNNING
14while True:
15    # read sensor data
16    up  = hub.imu.up()
17    pitch, roll = hub.imu.tilt()
18    
19    # process data
20
21    # output data
22    print(up, "\t", pitch, "\t", roll)

Motor as Sensor

Motor Measurement Example

 1from pybricks.hubs import PrimeHub
 2from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
 3from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
 4from pybricks.robotics import DriveBase
 5from pybricks.tools import wait, StopWatch
 6
 7# --- SETUP
 8# start components
 9hub = PrimeHub()
10left_motor = Motor(Port.E, Direction.CLOCKWISE)
11left_motor.reset_angle(0)
12
13# store variables
14
15# --- RUNNING
16while True:
17    # read sensor data
18    pressed = hub.buttons.pressed()
19    
20    # process data
21
22    # output data
23    if Button.LEFT in pressed and Button.RIGHT in pressed:
24        print("Angel:", left_motor.angle())
25        left_motor.run_target(1000, 0)
26        print("Angel:", left_motor.angle())
27    
28    elif Button.LEFT in pressed:
29        left_motor.run(300)
30        wait(250)
31        print("Speed:", left_motor.speed())
32        wait(500)
33        left_motor.stop()
34    
35    elif Button.RIGHT in pressed:
36        left_motor.run(300)
37        if left_motor.stalled():
38            print("Stalled")
39        else:
40            print("Torque load:", left_motor.load())
41    
42    else:
43        left_motor.stop()

Drive Base as Sensor

Drive Base Measurement Example

 1from pybricks.hubs import PrimeHub
 2from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
 3from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
 4from pybricks.robotics import DriveBase
 5from pybricks.tools import wait, StopWatch
 6
 7# --- SETUP
 8# start components
 9hub = PrimeHub()
10
11left_motor = Motor(Port.E, Direction.CLOCKWISE)
12right_motor = Motor(Port.F, Direction.COUNTERCLOCKWISE)
13my_robot = DriveBase(left_motor, right_motor, wheel_diameter=56, axle_track=80)
14my_robot.reset()
15
16# store variables
17mode_message = ""
18start_message = ""
19end_message = ""
20
21# --- RUNNING
22while True:
23    # read sensor data
24    pressed = hub.buttons.pressed()
25    
26    # process data
27    if Button.LEFT in pressed:
28        distance, speed, angle, rate_of_turn = my_robot.state()
29        mode_message = "Curved drive"
30        start_message = "Start - distance: " + str(distance) + ", speed: " + str(speed) + ", angle: " + str(angle) + ", rate of turn: " + str(rate_of_turn)
31        my_robot.curve(100, 180)
32        distance, speed, angle, rate_of_turn = my_robot.state()
33        end_message = "End - distance: " + str(distance) + ", speed: " + str(speed) + ", angle: " + str(angle) + ", rate of turn: " + str(rate_of_turn)
34
35    elif Button.RIGHT in pressed:
36        distance = my_robot.distance()
37        mode_message = "Straight drive"
38        start_message = "Start distance: " + str(distance)
39        my_robot.straight(500)
40        distance = my_robot.distance()
41        end_message = "End distance: " + str(distance)
42
43    elif Button.BLUETOOTH in pressed:
44        angle = my_robot.angle()
45        mode_message = "Turn on spot"
46        start_message = "Start angle:" + str(angle)
47        my_robot.turn(-90)
48        angle = my_robot.angle()
49        end_message = "End angle:" + str(angle)
50
51    else:
52        my_robot.stop()
53        
54    # output data
55    print(mode_message)
56    print("========================")
57    print(start_message)
58    print(end_message)
59    print()

Force Sensor

Force Sensor Example

 1from pybricks.hubs import PrimeHub
 2from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
 3from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
 4from pybricks.robotics import DriveBase
 5from pybricks.tools import wait, StopWatch
 6
 7# --- SETUP
 8# start components
 9hub = PrimeHub()
10force_sensor = ForceSensor(Port.A)
11
12# store variables
13
14# --- RUNNING
15while True:
16    # read sensor data
17    force_reading = round(force_sensor.force(), 1)
18    distance_reading = round(force_sensor.distance(), 1)
19    is_pressed = force_sensor.pressed(3)
20    is_touched = force_sensor.touched()
21    
22    # process data
23
24    # output data
25    print(
26        "Force:", force_reading,
27        "\tDistance:", distance_reading,
28        "\tForce > 3:", is_pressed,
29        "\tTouched:", is_touched
30    )

Color Sensor

Color Sensor Example

 1from pybricks.hubs import PrimeHub
 2from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
 3from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
 4from pybricks.robotics import DriveBase
 5from pybricks.tools import wait, StopWatch
 6
 7# --- SETUP
 8# start components
 9hub = PrimeHub()
10color_sensor = ColorSensor(Port.D)
11
12# store variables
13modes = ["S", "L", "R", "A"]
14mode = 0
15
16# --- RUNNING
17while True:
18    # read sensor data
19    presses = hub.buttons.pressed()
20    
21    if mode == 0:
22        mode_type = "Surface reading:"
23        colour_reading = color_sensor.color()
24    elif mode == 1:
25        mode_type = "Light source reading:"
26        colour_reading = color_sensor.color(False)
27    elif mode == 2:
28        mode_type = "Reflective light reading:"
29        colour_reading = color_sensor.reflection()
30    elif mode == 3:
31        mode_type = "Ambient light reading:"
32        colour_reading = color_sensor.ambient()
33        
34     
35    # process data
36    if Button.LEFT in presses and mode > 0:
37        mode -= 1
38        wait(250)
39    elif Button.RIGHT in presses and mode < 3:
40        mode += 1
41        wait(250)
42
43    # output data
44    hub.display.char(modes[mode])
45    print(mode_type, colour_reading)
46    
47    
48    

Distance Sensor

Distance Sensor Example

 1from pybricks.hubs import PrimeHub
 2from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
 3from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
 4from pybricks.robotics import DriveBase
 5from pybricks.tools import wait, StopWatch
 6
 7# --- SETUP
 8# start components
 9hub = PrimeHub()
10distance_sensor = UltrasonicSensor(Port.C)
11
12# store variables
13
14# --- RUNNING
15while True:
16    # read sensor data
17    distance = distance_sensor.distance()
18    present = distance_sensor.presence()
19    
20    # process data
21    
22    # output data
23    print("Distance:", distance, "\tDetected other sensor:", present)
24
25    distance_sensor.lights.off()
26    wait(100)
27    distance_sensor.lights.on(100)