From abe1be18b2955bd5d77278b4ed8bd1da9fe1cc17 Mon Sep 17 00:00:00 2001 From: Laurens Valk Date: Wed, 11 Nov 2020 17:09:44 +0100 Subject: [PATCH] examples/pup: add common light matrix display --- examples/pup/hub_shared/button_main.py | 29 +++++++++++++++++ examples/pup/hub_shared/display_animate.py | 19 +++++++++++ examples/pup/hub_shared/display_expression.py | 32 +++++++++++++++++++ examples/pup/hub_shared/display_image.py | 18 +++++++++++ examples/pup/hub_shared/display_matrix.py | 28 ++++++++++++++++ examples/pup/hub_shared/display_number.py | 10 ++++++ .../pup/hub_shared/display_orientation.py | 15 +++++++++ examples/pup/hub_shared/display_pixel.py | 20 ++++++++++++ examples/pup/hub_shared/display_text.py | 12 +++++++ 9 files changed, 183 insertions(+) create mode 100644 examples/pup/hub_shared/button_main.py create mode 100644 examples/pup/hub_shared/display_animate.py create mode 100644 examples/pup/hub_shared/display_expression.py create mode 100644 examples/pup/hub_shared/display_image.py create mode 100644 examples/pup/hub_shared/display_matrix.py create mode 100644 examples/pup/hub_shared/display_number.py create mode 100644 examples/pup/hub_shared/display_orientation.py create mode 100644 examples/pup/hub_shared/display_pixel.py create mode 100644 examples/pup/hub_shared/display_text.py diff --git a/examples/pup/hub_shared/button_main.py b/examples/pup/hub_shared/button_main.py new file mode 100644 index 0000000..014ec75 --- /dev/null +++ b/examples/pup/hub_shared/button_main.py @@ -0,0 +1,29 @@ +from pybricks.hubs import ExampleHub +from pybricks.parameters import Button, Icon +from pybricks.tools import wait + +# Initialize the hub. +hub = ExampleHub() + +# Wait for any button to be pressed, and save the result. +pressed = [] +while not any(pressed): + pressed = hub.buttons.pressed() + wait(10) + +# Display a circle. +hub.display.image(Icon.CIRCLE) + +# Wait for all buttons to be released. +while any(hub.buttons.pressed()): + wait(10) + +# Display an arrow to indicate which button was pressed. +if Button.LEFT in pressed: + hub.display.image(Icon.ARROW_LEFT_DOWN) +elif Button.RIGHT in pressed: + hub.display.image(Icon.ARROW_RIGHT_DOWN) +elif Button.BT in pressed: + hub.display.image(Icon.ARROW_RIGHT_UP) + +wait(3000) diff --git a/examples/pup/hub_shared/display_animate.py b/examples/pup/hub_shared/display_animate.py new file mode 100644 index 0000000..f4dadee --- /dev/null +++ b/examples/pup/hub_shared/display_animate.py @@ -0,0 +1,19 @@ +from pybricks.hubs import ExampleHub +from pybricks.parameters import Icon +from pybricks.tools import wait + +# Initialize the hub. +hub = ExampleHub() + +# Turn the hub light off (optional). +hub.light.off() + +# Create a list of intensities from 0 to 100 and back. +brightness = list(range(0, 100, 4)) + list(range(100, 0, -4)) + +# Create an animation of the heart icon with changing brightness. +hub.display.animate([Icon.HEART * i/100 for i in brightness], 30) + +# The animation repeats in the background. Here we just wait. +while True: + wait(100) diff --git a/examples/pup/hub_shared/display_expression.py b/examples/pup/hub_shared/display_expression.py new file mode 100644 index 0000000..052b6f6 --- /dev/null +++ b/examples/pup/hub_shared/display_expression.py @@ -0,0 +1,32 @@ +from pybricks.hubs import ExampleHub +from pybricks.parameters import Icon, Side +from pybricks.tools import wait + +from urandom import randint + +# Initialize the hub. +hub = ExampleHub() +hub.display.orientation(up=Side.RIGHT) + +while True: + + # Start with random left brow: up or down. + if randint(0, 100) < 70: + brows = Icon.EYE_LEFT_BROW*0.5 + else: + brows = Icon.EYE_LEFT_BROW_UP*0.5 + + # Add random right brow: up or down. + if randint(0, 100) < 70: + brows += Icon.EYE_RIGHT_BROW*0.5 + else: + brows += Icon.EYE_RIGHT_BROW_UP*0.5 + + for i in range(3): + # Display eyes open plus the random brows. + hub.display.image(Icon.EYE_LEFT + Icon.EYE_RIGHT + brows) + wait(2000) + + # Display eyes blinked plus the random brows. + hub.display.image(Icon.EYE_LEFT_BLINK*0.7 + Icon.EYE_RIGHT_BLINK*0.7 + brows) + wait(200) diff --git a/examples/pup/hub_shared/display_image.py b/examples/pup/hub_shared/display_image.py new file mode 100644 index 0000000..fd7712d --- /dev/null +++ b/examples/pup/hub_shared/display_image.py @@ -0,0 +1,18 @@ +from pybricks.hubs import ExampleHub +from pybricks.tools import wait +from pybricks.parameters import Icon + +# Initialize the hub. +hub = ExampleHub() + +# Display a big arrow pointing up. +hub.display.image(Icon.UP) + +# Wait so we can see what is displayed. +wait(2000) + +# Display a heart at half brightness. +hub.display.image(Icon.HEART / 2) + +# Wait so we can see what is displayed. +wait(2000) diff --git a/examples/pup/hub_shared/display_matrix.py b/examples/pup/hub_shared/display_matrix.py new file mode 100644 index 0000000..7c70de9 --- /dev/null +++ b/examples/pup/hub_shared/display_matrix.py @@ -0,0 +1,28 @@ +from pybricks.hubs import ExampleHub +from pybricks.tools import wait +from pybricks.geometry import Matrix + +# Initialize the hub. +hub = ExampleHub() + +# Make a square that is bright on the outside and faint in the middle. +SQUARE = Matrix([ + [100, 100, 100, 100, 100], + [100, 50, 50, 50, 100], + [100, 50, 0, 50, 100], + [100, 50, 50, 50, 100], + [100, 100, 100, 100, 100], +]) + +# Display the square. +hub.display.image(SQUARE) +wait(3000) + +# Make an image using a Python list comprehension. In this image, the +# brightness of each pixel is the sum of the row and column index. So the +# light is faint in the top left and bright in the rop right. +GRADIENT = Matrix([[(r + c) for c in range(5)] for r in range(5)]) * 12.5 + +# Display the generated gradient. +hub.display.image(GRADIENT) +wait(3000) diff --git a/examples/pup/hub_shared/display_number.py b/examples/pup/hub_shared/display_number.py new file mode 100644 index 0000000..b61b90b --- /dev/null +++ b/examples/pup/hub_shared/display_number.py @@ -0,0 +1,10 @@ +from pybricks.hubs import ExampleHub +from pybricks.tools import wait + +# Initialize the hub. +hub = ExampleHub() + +# Count from 0 to 99. +for i in range(100): + hub.display.number(i) + wait(200) diff --git a/examples/pup/hub_shared/display_orientation.py b/examples/pup/hub_shared/display_orientation.py new file mode 100644 index 0000000..85448ee --- /dev/null +++ b/examples/pup/hub_shared/display_orientation.py @@ -0,0 +1,15 @@ +from pybricks.hubs import ExampleHub +from pybricks.tools import wait +from pybricks.parameters import Side + +# Initialize the hub. +hub = ExampleHub() + +# Rotate the display. Now right is up. +hub.display.orientation(up=Side.RIGHT) + +# Display a number. This will be shown sideways. +hub.display.number(23) + +# Wait so we can see what is displayed. +wait(10000) diff --git a/examples/pup/hub_shared/display_pixel.py b/examples/pup/hub_shared/display_pixel.py new file mode 100644 index 0000000..b90ee57 --- /dev/null +++ b/examples/pup/hub_shared/display_pixel.py @@ -0,0 +1,20 @@ +from pybricks.hubs import ExampleHub +from pybricks.tools import wait + +# Initialize the hub. +hub = ExampleHub() + +# Turn off all the pixels. +hub.display.off() + +# Turn on the pixel at row 1, column 2. +hub.display.pixel(1, 2) +wait(2000) + +# Turn on the pixel at row 2, column 4, at 50% brightness. +hub.display.pixel(2, 4, 50) +wait(2000) + +# Turn off the pixel at row 1, column 2. +hub.display.pixel(1, 2, 0) +wait(2000) diff --git a/examples/pup/hub_shared/display_text.py b/examples/pup/hub_shared/display_text.py new file mode 100644 index 0000000..a6b65aa --- /dev/null +++ b/examples/pup/hub_shared/display_text.py @@ -0,0 +1,12 @@ +from pybricks.hubs import ExampleHub +from pybricks.tools import wait + +# Initialize the hub. +hub = ExampleHub() + +# Display the letter A for two seconds. +hub.display.char('A') +wait(2000) + +# Display text, one letter at a time. +hub.display.text('Hello, world!')