pimoroni-pico/micropython/examples/breakout_encoder_wheel/buttons.py

69 lines
2.0 KiB
Python

from pimoroni_i2c import PimoroniI2C
from pimoroni import BREAKOUT_GARDEN_I2C_PINS # or PICO_EXPLORER_I2C_PINS or HEADER_I2C_PINS
from breakout_encoder_wheel import BreakoutEncoderWheel, UP, DOWN, LEFT, RIGHT, CENTRE, NUM_BUTTONS, NUM_LEDS
"""
A demonstration of reading the 5 buttons on Encoder Wheel.
Press Ctrl+C to stop the program.
"""
# Constants
BUTTON_NAMES = ["Up", "Down", "Left", "Right", "Centre"]
# Create a new BreakoutEncoderWheel
i2c = PimoroniI2C(**BREAKOUT_GARDEN_I2C_PINS)
wheel = BreakoutEncoderWheel(i2c)
# Variables
last_pressed = [False] * NUM_BUTTONS
pressed = [False] * NUM_BUTTONS
# Loop forever
while True:
# Read all of the encoder wheel's buttons
for b in range(NUM_BUTTONS):
pressed[b] = wheel.pressed(b)
if pressed[b] != last_pressed[b]:
print(BUTTON_NAMES[b], "Pressed" if pressed[b] else "Released")
last_pressed[b] = pressed[b]
# Clear the LED ring
wheel.clear()
for i in range(NUM_LEDS):
if i % 6 == 3:
wheel.set_rgb(i, 64, 64, 64)
# If up is pressed, set the top LEDs to yellow
if pressed[UP]:
mid = NUM_LEDS
for i in range(mid - 2, mid + 3):
wheel.set_rgb(i % NUM_LEDS, 255, 255, 0)
# If right is pressed, set the right LEDs to red
if pressed[RIGHT]:
mid = NUM_LEDS // 4
for i in range(mid - 2, mid + 3):
wheel.set_rgb(i % NUM_LEDS, 255, 0, 0)
# If down is pressed, set the bottom LEDs to green
if pressed[DOWN]:
mid = NUM_LEDS // 2
for i in range(mid - 2, mid + 3):
wheel.set_rgb(i % NUM_LEDS, 0, 255, 0)
# If left is pressed, set the left LEDs to blue
if pressed[LEFT]:
mid = (NUM_LEDS * 3) // 4
for i in range(mid - 2, mid + 3):
wheel.set_rgb(i % NUM_LEDS, 0, 0, 255)
# If centre is pressed, set the diagonal LEDs to half white
if pressed[CENTRE]:
for i in range(NUM_LEDS):
if i % 6 >= 2 and i % 6 <= 4:
wheel.set_rgb(i, 128, 128, 128)
wheel.show()