83 lines
3.4 KiB
Python
83 lines
3.4 KiB
Python
# SPDX-FileCopyrightText: 2018 Noe Ruiz for Adafruit Industries
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
import time
|
|
import board
|
|
import pwmio
|
|
import simpleio
|
|
from digitalio import DigitalInOut, Direction, Pull
|
|
import adafruit_fancyled.adafruit_fancyled as fancy
|
|
import neopixel
|
|
|
|
NEOPIXEL_PIN = board.D6
|
|
NEOPIXEL_NUM = 31
|
|
pixels = neopixel.NeoPixel(NEOPIXEL_PIN, NEOPIXEL_NUM, auto_write=False)
|
|
|
|
# Since its common anode, 'off' is max duty cycle
|
|
red_led = pwmio.PWMOut(board.D9, frequency=5000, duty_cycle=65535)
|
|
green_led = pwmio.PWMOut(board.D10, frequency=5000, duty_cycle=65535)
|
|
blue_led = pwmio.PWMOut(board.D11, frequency=5000, duty_cycle=65535)
|
|
|
|
switch = DigitalInOut(board.D12)
|
|
switch.direction = Direction.INPUT
|
|
switch.pull = Pull.UP
|
|
|
|
colorways = [fancy.CRGB(1.0, 1.0, 1.0), # White
|
|
fancy.CRGB(1.0, 0.0, 0.0), # Red
|
|
fancy.CRGB(0.5, 0.5, 0.0), # Yellow
|
|
fancy.CRGB(0.0, 1.0, 0.0), # Green
|
|
fancy.CRGB(0.0, 0.5, 0.5), # Cyan
|
|
fancy.CRGB(0.0, 0.0, 1.0), # Blue
|
|
fancy.CRGB(0.5, 0.0, 0.5), # Magenta
|
|
# you can also make lists of colors to cycle through, like red/green/blue:
|
|
[fancy.CRGB(1.0, 0.0, 0.0), fancy.CRGB(0.0, 1.0, 0.0), fancy.CRGB(0.0, 0.0, 1.0)],
|
|
# or just white/blue
|
|
[fancy.CRGB(1.0, 1.0, 1.0), fancy.CRGB(0.0, 0.0, 1.0)],
|
|
]
|
|
color_index = 0
|
|
|
|
def set_rgb_led(color):
|
|
# convert from 0-255 (neopixel range) to 65535-0 (pwm range)
|
|
red_led.duty_cycle = int(simpleio.map_range(color[0], 0, 255, 65535, 0))
|
|
green_led.duty_cycle = int(simpleio.map_range(color[1], 0, 255, 65535, 0))
|
|
blue_led.duty_cycle = int(simpleio.map_range(color[2], 0, 255, 65535, 0))
|
|
|
|
while True:
|
|
colorway = colorways[color_index]
|
|
if not isinstance(colorway, list):
|
|
print("Setting pixels to RGB", colorway)
|
|
pixels.fill(colorway.pack())
|
|
pixels.show()
|
|
set_rgb_led(pixels[0]) # set RGB LED as same as first pixel
|
|
|
|
else:
|
|
# its a list of colors to cycle through
|
|
print("Setting pixels to a pallete of", colorway)
|
|
swirl = 0 # we'll swirl through the colors in the color way
|
|
while switch.value: # button pressed? quit!
|
|
for i in range(NEOPIXEL_NUM):
|
|
# the index into the palette is from 0 to 1.0 and uses the pixels
|
|
# number and the swirl number to take us through the whole thing!
|
|
pallete_index = ((swirl+i) % NEOPIXEL_NUM) / NEOPIXEL_NUM
|
|
# Then look up the color in the pallete
|
|
color_lookup = fancy.palette_lookup(colorway, pallete_index)
|
|
# display it!
|
|
pixels[i] = color_lookup.pack()
|
|
# check button often
|
|
if not switch.value:
|
|
break # if its pressed, quit now
|
|
pixels.show() # show the pixels!
|
|
set_rgb_led(pixels[0]) # set RGB LED as same as first pixel
|
|
swirl += 1 # never stop swirlin!
|
|
print('Done with pallete display')
|
|
|
|
while switch.value:
|
|
pass # hang out and wait for the button to be pressed
|
|
while not switch.value:
|
|
pass # hang out and wait for the button to be released!
|
|
print("Button pressed")
|
|
# go to the next colorway
|
|
color_index = (color_index + 1) % len(colorways)
|
|
# a little debouncin' delay
|
|
time.sleep(0.01)
|