MINDSTORMS Inventor Hub

../_images/inventorhub1.png
class InventorHub

LEGO® MINDSTORMS Inventor Hub.

This class is identical to the PrimeHub class, except for the name.

Using the hub status light

../_images/primehub_light_label.png

Show/hide examples

Example 1: Turning the light on and off

from pybricks.hubs import InventorHub
from pybricks.parameters import Color
from pybricks.tools import wait

# Initialize the hub.
hub = InventorHub()

# Turn the light on and off 5 times.
for i in range(5):

    hub.light.on(Color.RED)
    wait(1000)

    hub.light.off()
    wait(500)

Example 2: Changing brightness and using custom colors

from pybricks.hubs import InventorHub
from pybricks.parameters import Color
from pybricks.tools import wait

# Initialize the hub.
hub = InventorHub()

# Show the color at 30% brightness.
hub.light.on(Color.RED * 0.3)

wait(2000)

# Use your own custom color.
hub.light.on(Color(h=30, s=100, v=50))

wait(2000)

# Go through all the colors.
for hue in range(360):
    hub.light.on(Color(hue))
    wait(10)

Example 3: Making the light blink

from pybricks.hubs import InventorHub
from pybricks.parameters import Color
from pybricks.tools import wait

# Initialize the hub
hub = InventorHub()

# Keep blinking red on and off.
hub.light.blink(Color.RED, [500, 500])

wait(10000)

# Keep blinking green slowly and then quickly.
hub.light.blink(Color.GREEN, [500, 500, 50, 900])

wait(10000)

Example 4: Creating light animations

from pybricks.hubs import InventorHub
from pybricks.parameters import Color
from pybricks.tools import wait
from math import sin, pi

# Initialize the hub.
hub = InventorHub()

# Make an animation with multiple colors.
hub.light.animate([Color.RED, Color.GREEN, None], interval=500)

wait(10000)

# Make the color RED grow faint and bright using a sine pattern.
hub.light.animate(
    [Color.RED * (0.5 * sin(i / 15 * pi) + 0.5) for i in range(30)], 40)

wait(10000)

# Cycle through a rainbow of colors.
hub.light.animate([Color(h=i*8) for i in range(45)], interval=40)

wait(10000)
light.on(color)

Turns on the light at the specified color.

Parameters:color (Color) – Color of the light.
light.off()

Turns off the light.

Blinks the light at a given color by turning it on and off for given durations.

The light keeps blinking indefinitely while the rest of your program keeps running.

This method provides a simple way to make basic but useful patterns. For more generic and multi-color patterns, use animate() instead.

Parameters:
  • color (Color) – Color of the light.
  • durations (list) – List of (time: ms) values of the form [on_1, off_1, on_2, off_2, ...].
light.animate(colors, interval)

Animates the light with a list of colors. The next color in the list is shown after the given interval.

The animation runs in the background while the rest of your program keeps running. When the animation completes, it repeats.

Parameters:
  • colors (list) – List of Color values.
  • interval (time: ms) – Time between color updates.

Using the light matrix display

../_images/primehub_display_label.png

Show/hide examples

Example 1: Displaying images

from pybricks.hubs import InventorHub
from pybricks.tools import wait
from pybricks.parameters import Icon

# Initialize the hub.
hub = InventorHub()

# 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)

Example 2: Displaying numbers

from pybricks.hubs import InventorHub
from pybricks.tools import wait

# Initialize the hub.
hub = InventorHub()

# Count from 0 to 99.
for i in range(100):
    hub.display.number(i)
    wait(200)

Example 3: Displaying text

from pybricks.hubs import InventorHub
from pybricks.tools import wait

# Initialize the hub.
hub = InventorHub()

# 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!')

Example 4: Displaying individual pixels

from pybricks.hubs import InventorHub
from pybricks.tools import wait

# Initialize the hub.
hub = InventorHub()

# 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)

Example 5: Changing the display orientation

from pybricks.hubs import InventorHub
from pybricks.tools import wait
from pybricks.parameters import Side

# Initialize the hub.
hub = InventorHub()

# 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)

Example 6: Making your own images

from pybricks.hubs import InventorHub
from pybricks.tools import wait
from pybricks.geometry import Matrix

# Initialize the hub.
hub = InventorHub()

# 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 bottom 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)

Example 7: Combining images to make expressions

from pybricks.hubs import InventorHub
from pybricks.parameters import Icon, Side
from pybricks.tools import wait

from urandom import randint

# Initialize the hub.
hub = InventorHub()
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)

Example 8: Displaying animations

from pybricks.hubs import InventorHub
from pybricks.parameters import Icon
from pybricks.tools import wait

# Initialize the hub.
hub = InventorHub()

# 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)
display.orientation(up)

Sets the orientation of the light matrix display.

Only new displayed images and pixels are affected. The existing display contents remain unchanged.

Parameters:top (Side) – Which side of the light matrix display is “up” in your design. Choose Side.TOP, Side.LEFT, Side.RIGHT, or Side.BOTTOM.
display.off()

Turns off all the pixels.

display.pixel(row, column, brightness=100)

Turns on one pixel at the specified brightness.

Parameters:
  • row (int) – Vertical grid index, starting at 0 from the top.
  • column (int) – Horizontal grid index, starting at 0 from the left.
  • brightness (brightness: %) – Brightness of the pixel.
display.image(matrix)

Displays an image, represented by a matrix of brightness: % values.

Parameters:matrix (Matrix) – Matrix of intensities (brightness: %). A 2D list is also accepted.
display.animate(matrices, interval)

Displays an animation made using a list of images.

Each image has the same format as above. Each image is shown for the given interval. The animation repeats forever while the rest of your program keeps running.

Parameters:
  • matrix (list) – List of Matrix of intensities.
  • interval (time: ms) – Time to display each image in the list.
display.number(number)

Displays a number in the range -99 to 99.

A minus sign (-) is shown as a faint dot in the center of the display. Numbers greater than 99 are shown as >. Numbers less than -99 are shown as <.

Parameters:number (int) – The number to be displayed.
display.char(char)

Displays a character or symbol on the light grid. This may be any letter (az), capital letter (AZ) or one of the following symbols: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}.

Parameters:character (str) – The character or symbol to be displayed.
display.text(text, on=500, off=50)

Displays a text string, one character at a time, with a pause between each character. After the last character is shown, all lights turn off.

Parameters:
  • text (str) – The text to be displayed.
  • on (time: ms) – For how long a character is shown.
  • off (time: ms) – For how long the display is off between characters.

Using the buttons

../_images/primehub_buttons_label.png

Show/hide examples

Example: Detecting button presses

from pybricks.hubs import InventorHub
from pybricks.parameters import Button, Icon
from pybricks.tools import wait

# Initialize the hub.
hub = InventorHub()

# 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)
buttons.pressed()

Checks which buttons are currently pressed.

Returns:List of pressed buttons.
Return type:List of Button

Using the battery

battery.voltage()

Gets the voltage of the battery.

Returns:Battery voltage.
Return type:voltage: mV
battery.current()

Gets the current supplied by the battery.

Returns:Battery current.
Return type:current: mA