The code begins by importing the libraries and the colors that Frank's NeoPixels will be able to switch between.
import time
import board
import touchio
import neopixel
from adafruit_led_animation.animation.pulse import Pulse
from adafruit_led_animation.color import (
RED,
YELLOW,
ORANGE,
GREEN,
TEAL,
CYAN,
BLUE,
PURPLE,
MAGENTA,
GOLD,
PINK,
AQUA,
JADE,
AMBER
)
The NeoPixels are setup, along with the Pulse LED animation.
# NeoPixel pin pixel_pin = board.A3 # number of NeoPixels pixel_num = 68 # NeoPixels setup pixels = neopixel.NeoPixel(pixel_pin, pixel_num, brightness=0.5, auto_write=False) # animation setup pulse = Pulse(pixels, speed=0.1, color=RED, period=5)
Capacitive touch is setup for pins A1 and A2.
# two cap touch pins touch_left = board.A1 touch_right = board.A2 # cap touch setup bolt_left = touchio.TouchIn(touch_left) bolt_right = touchio.TouchIn(touch_right)
The colors array is created to hold all of the NeoPixel color options. This array will be accessed in the loop to change the NeoPixel color.
# NeoPixel colors for animation
colors = [RED, YELLOW, ORANGE, GREEN, TEAL, CYAN, BLUE,
PURPLE, MAGENTA, GOLD, PINK, AQUA, JADE, AMBER]
c is setup to be the index variable for the colors array. Its value will be updated in the loop to change the NeoPixel color.
bolt_left_state and bolt_right_state are setup to debounce the capacitive touch inputs.
# variable for color array index c = 0 # debounce states for cap touch bolt_left_state = False bolt_right_state = False
The loop begins by running the Pulse animation and setting up debouncing for the capacitive touch inputs. The adafruit_led_animation library allows for the animation to run uninterrupted in the background in the loop while other processes can take place.
while True:
# run animation
pulse.animate()
# debounce for cap touch
if not bolt_left.value and not bolt_left_state:
bolt_left_state = True
if not bolt_right.value and not bolt_right_state:
bolt_right_state = True
The capacitive touch inputs affect the value of c. If Frank's left bolt is touched, then c increases by 1. If Frank's right bolt is touched, then c decreases by 1.
# if the left bolt is touched...
if bolt_left.value and bolt_left_state:
print("Touched left bolt!")
# increase color array index by 1
c += 1
# reset debounce state
bolt_left_state = False
# if the right bolt is touched...
if bolt_right.value and bolt_right_state:
print("Touched right bolt!")
# decrease color array index by 1
c -= 1
# reset debounce state
bolt_right_state = False
c is tracking the index of the colors array. There are 14 colors total. If c goes above that range, it is reset to 0. If c goes below 0, it is reset to 13. This allows you to loop through the colors continuously.
# if the color array index is bigger than 13...
if c > 13:
# reset it to 0
c = 0
# if the color array index is smaller than 0...
if c < 0:
# reset it to 13
c = 13
Finally, the color of the NeoPixels is updated with pulse.color. You can access the animation's other parameters in the loop by using pulse.[parameter], for example: pulse.speed, pulse.period, etc.
# update animation color to current array index
pulse.color = colors[c]
time.sleep(0.01)
Page last edited March 08, 2024
Text editor powered by tinymce.