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!
    #

This guide was first published on Apr 24, 2017. It was last updated on Apr 24, 2017.

This page (The All Of Them CircuitPython) was last updated on Jun 24, 2021.

Text editor powered by tinymce.