Here's CircuitPython code for the "All Of Them" version. You can compare each individual animation to its equivalent in the Arduino code.
CircuitPython only works on the Circuit Playground Express.
# Circuit Playground Express Bike Light - The All Of Them
#
# Author: Carter Nelson
# MIT License (https://opensource.org/licenses/MIT)
import time
import random
from adafruit_circuitplayground.express import cpx
# Change these to set speed (lower is faster)
FLASH_RATE = 0.250
SPIN_RATE = 0.100
CYLON_RATE = 0.100
BEDAZZLE_RATE = 0.100
CHASE_RATE = 0.100
# Change these to be whatever color you want
# Use color picker to come up with hex values
FLASH_COLOR = 0xFF0000
SPIN_COLOR = 0xFF0000
CYLON_COLOR = 0xFF0000
# Define 10 colors here.
# Must be 10 entries.
# Use 0x000000 if you want a blank space.
RAINBOW_COLORS = (
0xFF0000,
0xFF5500,
0xFFFF00,
0x00FF00,
0x0000FF,
0xFF00FF,
0x000000,
0x000000,
0x000000,
0x000000
)
def buttons_pressed():
return cpx.button_a or cpx.button_b
def flasher():
while not buttons_pressed():
# Turn on all the pixels to FLASH_COLOR
cpx.pixels.fill(FLASH_COLOR)
# Leave them on for a little bit
time.sleep(FLASH_RATE)
# Turn off all the NeoPixels
cpx.pixels.fill(0)
# Leave them off for a little bit
time.sleep(FLASH_RATE)
def spinner():
# Can be any two pixels
pixel1 = 0
pixel2 = 5
while not buttons_pressed():
# Turn off all the NeoPixels
cpx.pixels.fill(0)
# Turn on two pixels to SPIN_COLOR
cpx.pixels[pixel1] = SPIN_COLOR
cpx.pixels[pixel2] = SPIN_COLOR
# Increment pixels to move them around the board
pixel1 = pixel1 + 1
pixel2 = pixel2 + 1
# Check pixel values
pixel1 = pixel1 if pixel1 < 10 else 0
pixel2 = pixel2 if pixel2 < 10 else 0
# Wait a little bit so we don't spin too fast
time.sleep(SPIN_RATE)
def cylon():
pixel1 = 0
pixel2 = 9
while not buttons_pressed():
# Scan in one direction
for step in range(4):
cpx.pixels.fill(0)
cpx.pixels[pixel1] = CYLON_COLOR
cpx.pixels[pixel2] = CYLON_COLOR
pixel1 = pixel1 + 1
pixel2 = pixel2 - 1
time.sleep(CYLON_RATE)
# Scan back the other direction
for step in range(4):
cpx.pixels.fill(0)
cpx.pixels[pixel1] = CYLON_COLOR
cpx.pixels[pixel2] = CYLON_COLOR
pixel1 = pixel1 - 1
pixel2 = pixel2 + 1
time.sleep(CYLON_RATE)
def bedazzler():
while not buttons_pressed():
# Turn off all the NeoPixels
cpx.pixels.fill(0)
# Turn on a random pixel to a random color
cpx.pixels[random.randrange(10)] = ( random.randrange(256),
random.randrange(256),
random.randrange(256) )
# Leave it on for a little bit
time.sleep(BEDAZZLE_RATE)
def rainbow():
# Start at the beginning
start_color = 0
while not buttons_pressed():
# Turn off all the NeoPixels
cpx.pixels.fill(0)
# Loop through and set pixels
color = start_color
for p in range(10):
cpx.pixels[p] = RAINBOW_COLORS[color]
color += 1
color = color if color < 10 else 0
# Increment start index into color array
start_color += 1
# Check value and reset if necessary
start_color = start_color if start_color < 10 else 0
# Wait a little bit so we don't spin too fast
time.sleep(CHASE_RATE)
# Loop forever
while True:
flasher() ; time.sleep(0.25)
spinner() ; time.sleep(0.25)
cylon() ; time.sleep(0.25)
bedazzler() ; time.sleep(0.25)
rainbow() ; time.sleep(0.25)
#
# TODO: add your animation here!
#
Page last edited March 08, 2024
Text editor powered by tinymce.