63 lines
2.4 KiB
Python
63 lines
2.4 KiB
Python
# SPDX-FileCopyrightText: 2017 Phillip Burgess for Adafruit Industries
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
# NeoPixel earrings example. Makes a nice blinky display with just a
|
|
# few LEDs on at any time...uses MUCH less juice than rainbow display!
|
|
|
|
import time
|
|
from rainbowio import colorwheel
|
|
import board
|
|
import neopixel
|
|
import adafruit_dotstar
|
|
|
|
try:
|
|
import urandom as random # for v1.0 API support
|
|
except ImportError:
|
|
import random
|
|
|
|
dot = adafruit_dotstar.DotStar(board.APA102_SCK, board.APA102_MOSI, 1, brightness=0.2)
|
|
dot[0] = (0, 0, 0)
|
|
|
|
numpix = 16 # Number of NeoPixels (e.g. 16-pixel ring)
|
|
pixpin = board.D0 # Pin where NeoPixels are connected
|
|
strip = neopixel.NeoPixel(pixpin, numpix, brightness=.3, auto_write=False)
|
|
|
|
mode = 0 # Current animation effect
|
|
offset = 0 # Position of spinner animation
|
|
hue = 0 # Starting hue
|
|
color = colorwheel(hue & 255) # hue -> RGB color
|
|
prevtime = time.monotonic() # Time of last animation mode switch
|
|
|
|
while True: # Loop forever...
|
|
if mode == 0: # Random sparkles - lights just one LED at a time
|
|
i = random.randint(0, numpix - 1) # Choose random pixel
|
|
strip[i] = color # Set it to current color
|
|
strip.show() # Refresh LED states
|
|
# Set same pixel to "off" color now but DON'T refresh...
|
|
# it stays on for now...bot this and the next random
|
|
# pixel will be refreshed on the next pass.
|
|
strip[i] = [0, 0, 0]
|
|
time.sleep(0.008) # 8 millisecond delay
|
|
elif mode == 1: # Spinny colorwheel (4 LEDs on at a time)
|
|
for i in range(numpix): # For each LED...
|
|
if ((offset + i) & 7) < 2: # 2 pixels out of 8...
|
|
strip[i] = color # are set to current color
|
|
else:
|
|
strip[i] = [0, 0, 0] # other pixels are off
|
|
strip.show() # Refresh LED states
|
|
time.sleep(0.04) # 40 millisecond delay
|
|
offset += 1 # Shift animation by 1 pixel on next frame
|
|
if offset >= 8:
|
|
offset = 0
|
|
# Additional animation modes could be added here!
|
|
|
|
t = time.monotonic() # Current time in seconds
|
|
if (t - prevtime) >= 8: # Every 8 seconds...
|
|
mode += 1 # Advance to next mode
|
|
if mode > 1: # End of modes?
|
|
mode = 0 # Start over from beginning
|
|
hue += 80 # And change color
|
|
color = colorwheel(hue & 255)
|
|
strip.fill([0, 0, 0]) # Turn off all pixels
|
|
prevtime = t # Record time of last mode change
|