I’m trying to control some NeoPixels with a rotary encoder. My code works except for an “index out of range” for the tuple. I only have 9 animations in the list, so the rotary value of 10 or -10 breaks it. I need it to go in a circle, I guess.
TY!
‘’’
import board
from adafruit_seesaw import seesaw, rotaryio, digitalio
import neopixel
import time
from adafruit_led_animation.animation.rainbow import Rainbow
from adafruit_led_animation.animation.rainbowchase import RainbowChase
from adafruit_led_animation.animation.rainbowcomet import RainbowComet
from adafruit_led_animation.animation.rainbowsparkle import RainbowSparkle
from adafruit_led_animation.animation.chase import Chase
from adafruit_led_animation.animation.comet import Comet
from adafruit_led_animation.sequence import AnimationSequence
from adafruit_led_animation.animation.pulse import Pulse
from adafruit_led_animation.animation.solid import Solid
from adafruit_led_animation.animation.colorcycle import ColorCycle
from adafruit_led_animation.color import (
PURPLE,
WHITE,
BLUE,
AMBER,
TEAL,
PINK,
MAGENTA,
)
seesaw = seesaw.Seesaw(board.I2C(), 0x36)
encoder = rotaryio.IncrementalEncoder(seesaw)
seesaw.pin_mode(24, seesaw.INPUT_PULLUP)
switch = digitalio.DigitalIO(seesaw, 24)
switch_held = False
position = 0
last_position = 0
pixel_pin = board.D8
pixel_num = 64
pixels = neopixel.NeoPixel(pixel_pin, pixel_num, brightness=0.05, auto_write=False)
rainbow = Rainbow(pixels, speed=0.1, period=2)
rainbow_chase = RainbowChase(pixels, speed=0.1, size=5, spacing=3)
rainbow_comet = RainbowComet(pixels, speed=0.1, tail_length=7, bounce=True)
rainbow_sparkle = RainbowSparkle(pixels, speed=0.1, num_sparkles=15)
comet = Comet(pixels, speed=0.001, color=PURPLE, tail_length=30, bounce=True)
pulse = Pulse(pixels, speed=0.1, color=AMBER, period=3)
chase = Chase(pixels, speed=0.1, color=WHITE, size=3, spacing=6)
colorcycle = ColorCycle(pixels, speed=0.4, colors=[MAGENTA, PINK, TEAL, PURPLE])
solid = Solid(pixels, color=BLUE)
animations = (
rainbow,
rainbow_chase,
rainbow_comet,
rainbow_sparkle,
solid,
colorcycle,
chase,
pulse,
comet,
)
while True:
position = encoder.position
time.sleep(.1)
if position != last_position:
print("encoder has moved")
print(position)
if position == last_position:
print("encoder at zero")
if position > last_position:
print("changing animation")
print((animations[position]))
animations[position].animate()
if position < last_position:
print("changing animation")
animations[position].animate()
print((animations[position]))
else:
pass
‘’’