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)
Text editor powered by tinymce.