I have one pattern added, took it from the rainbow example.
Pressing Up gets me White, Left is RED, Right is Blue, and Down is Rainbow (was originally Green). Center Button turns all the LED’s off.
Took me a while but I even got the brightness to adjust on the fly while the pattern is running.
import time
import plasma
import machine
import micropython
from plasma import plasma_stick
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
BUTTON_NAMES = ["Up", "Down", "Left", "Right", "Centre"]
i2c = PimoroniI2C(plasma_stick.SDA, plasma_stick.SCL)
wheel = BreakoutEncoderWheel(i2c)
last_pressed = [False] * NUM_BUTTONS
pressed = [False] * NUM_BUTTONS
STRIP_LEDS = 144
SPEED = 20
UPDATES = 60
# WS2812 / NeoPixel™ LEDs
led_strip = plasma.WS2812(STRIP_LEDS, 0, 0, plasma_stick.DAT, color_order=plasma.COLOR_ORDER_GRB)
led_strip.start()
offset = 0.0
brightness = (0.5)
pattern = 0
red = (1 / 360)
green = (130 / 360)
blue = (250 / 360)
yellow = (60 / 360)
orange = (30 / 360)
white = (1.0)
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]
if pressed[UP]:
pattern = 0
wheel.clear()
for i in range(NUM_LEDS):
wheel.set_hsv(i, 1, 0, brightness)
for s in range(STRIP_LEDS):
led_strip.set_hsv(s, 1, 0, brightness)
wheel.set_hsv(0, 1.0, 0, 1.0)
wheel.set_hsv(6, blue, 1.0, 1.0)
wheel.set_hsv(11, blue, 1.0, 1.0)
wheel.set_hsv(12, green, 1.0, 1.0)
wheel.set_hsv(13, red, 1.0, 1.0)
wheel.set_hsv(18, red, 1.0, 1.0)
color = white
if pressed[RIGHT]:
pattern = 0
wheel.clear()
for i in range(NUM_LEDS):
wheel.set_hsv(i, blue, 1.0, brightness)
for s in range(STRIP_LEDS):
led_strip.set_hsv(s, blue, 1.0, brightness)
wheel.set_hsv(0, 1.0, 0, 1.0)
wheel.set_hsv(6, blue, 1.0, 1.0)
wheel.set_hsv(11, blue, 1.0, 1.0)
wheel.set_hsv(12, green, 1.0, 1.0)
wheel.set_hsv(13, red, 1.0, 1.0)
wheel.set_hsv(18, red, 1.0, 1.0)
color = blue
if pressed[DOWN]:
pattern = 1
wheel.clear()
'''
for i in range(NUM_LEDS):
wheel.set_hsv(i, green, 1.0, brightness)
for s in range(STRIP_LEDS):
led_strip.set_hsv(s, green, 1.0, brightness)
wheel.set_hsv(0, 1.0, 0, 1.0)
wheel.set_hsv(6, blue, 1.0, 1.0)
wheel.set_hsv(11, blue, 1.0, 1.0)
wheel.set_hsv(12, green, 1.0, 1.0)
wheel.set_hsv(13, red, 1.0, 1.0)
wheel.set_hsv(18, red, 1.0, 1.0)
'''
if pressed[LEFT]:
pattern = 0
wheel.clear()
for i in range(NUM_LEDS):
wheel.set_hsv(i, red, 1.0, brightness)
for s in range(STRIP_LEDS):
led_strip.set_hsv(s, red, 1.0, brightness)
wheel.set_hsv(0, 1.0, 0, 1.0)
wheel.set_hsv(6, blue, 1.0, 1.0)
wheel.set_hsv(11, blue, 1.0, 1.0)
wheel.set_hsv(12, green, 1.0, 1.0)
wheel.set_hsv(13, red, 1.0, 1.0)
wheel.set_hsv(18, red, 1.0, 1.0)
color = red
if pressed[CENTRE]:
pattern = 0
wheel.clear()
for s in range(STRIP_LEDS):
led_strip.set_hsv(s, 0, 0, 0)
# Has the dial been turned since the last time we checked?
change = wheel.delta()
if change != 0:
# Print out the direction the dial was turned, and the count
if change > 0:
print("Clockwise, Count =", wheel.count())
else:
print("Counter Clockwise, Count =", wheel.count())
position = wheel.count()
brightness = ((position + 25) / 50)
if brightness < 0:
brightness = 0
if brightness > 1:
brightness = 1
print ("Brightness =", brightness)
wheel.clear()
if pattern == 0:
if color == white:
for i in range(NUM_LEDS):
wheel.set_hsv(i, 1.0, 0, brightness)
for s in range(STRIP_LEDS):
led_strip.set_hsv(s, 1.0, 0, brightness)
else:
for i in range(NUM_LEDS):
wheel.set_hsv(i, color, 1.0, brightness)
for s in range(STRIP_LEDS):
led_strip.set_hsv(s, color, 1.0, brightness)
wheel.set_hsv(0, 1.0, 0, 1.0)
wheel.set_hsv(6, blue, 1.0, 1.0)
wheel.set_hsv(11, blue, 1.0, 1.0)
wheel.set_hsv(12, green, 1.0, 1.0)
wheel.set_hsv(13, red, 1.0, 1.0)
wheel.set_hsv(18, red, 1.0, 1.0)
if pattern == 1:
SPEED = min(255, max(1, SPEED))
offset += float(SPEED) / 2000.0
offset %= 1
for s in range(STRIP_LEDS):
hue = (offset + float(s) / STRIP_LEDS) % 1
led_strip.set_hsv(s, hue + offset, 1.0, brightness)
for i in range(NUM_LEDS):
wheel.set_hsv(i, hue + offset, 1.0, brightness)
time.sleep(1.0 / UPDATES)
wheel.show()