simplified code
adding a simplified version
This commit is contained in:
parent
e3e2ba8b7f
commit
f3b4f3b5ec
1 changed files with 116 additions and 0 deletions
116
NeoPixel_Crystal_Chandelier/code_simple.py
Normal file
116
NeoPixel_Crystal_Chandelier/code_simple.py
Normal file
|
|
@ -0,0 +1,116 @@
|
||||||
|
"""
|
||||||
|
Crystal Chandelier with Circuit Playground BlueFruit
|
||||||
|
Adafruit invests time and resources providing this open source code.
|
||||||
|
Please support Adafruit and open source hardware by purchasing
|
||||||
|
products from Adafruit!
|
||||||
|
Written by Erin St Blaine & Limor Fried for Adafruit Industries
|
||||||
|
Copyright (c) 2020-2021 Adafruit Industries
|
||||||
|
Licensed under the MIT license.
|
||||||
|
All text above must be included in any redistribution.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# pylint: disable=import-error
|
||||||
|
# pylint: disable=no-member
|
||||||
|
import board
|
||||||
|
import digitalio
|
||||||
|
import rotaryio
|
||||||
|
import neopixel
|
||||||
|
from adafruit_circuitplayground import cp
|
||||||
|
|
||||||
|
from adafruit_led_animation.group import AnimationGroup
|
||||||
|
from adafruit_led_animation.animation.comet import Comet
|
||||||
|
from adafruit_led_animation.animation.solid import Solid
|
||||||
|
from adafruit_led_animation.color import (
|
||||||
|
BLACK,
|
||||||
|
PURPLE,
|
||||||
|
)
|
||||||
|
|
||||||
|
NEOPIXEL_PIN = board.A1 # NeoPixels connected here (crystals + rings)
|
||||||
|
NUM_PIXELS = 92 # Number of pixels in the crystals and rings
|
||||||
|
|
||||||
|
MIN_BRIGHTNESS = 1 # Minimum LED brightness as a percentage (0 to 100)
|
||||||
|
MAX_BRIGHTNESS = 25 # Maximum LED brighrness as a percentage (0 to 100)
|
||||||
|
MIN_FPS = 2 # Minimum animation speed in frames per second (>0)
|
||||||
|
MAX_FPS = 8 # Maximum animation speed in frames per second (>0)
|
||||||
|
|
||||||
|
# Set initial brightness and speed to center values
|
||||||
|
BRIGHTNESS = (MIN_BRIGHTNESS + MAX_BRIGHTNESS) // 2
|
||||||
|
FPS = (MIN_FPS + MAX_FPS) // 2
|
||||||
|
SPEED = 1 / FPS # Integer frames-per-second to seconds interval
|
||||||
|
LEVEL = BRIGHTNESS * 0.01 # Integer brightness percentage to 0.0-1.0 coeff.
|
||||||
|
|
||||||
|
button = digitalio.DigitalInOut(board.A5)
|
||||||
|
button.direction = digitalio.Direction.INPUT
|
||||||
|
button.pull = digitalio.Pull.UP
|
||||||
|
BUTTON_STATE = None
|
||||||
|
BUTTON_VALUE = None
|
||||||
|
|
||||||
|
PIXELS = neopixel.NeoPixel(NEOPIXEL_PIN, NUM_PIXELS, brightness=LEVEL,
|
||||||
|
auto_write=False)
|
||||||
|
|
||||||
|
# NeoPixels off ASAP on startup
|
||||||
|
cp.pixels.fill(0) # Onboard pixels
|
||||||
|
cp.pixels.show()
|
||||||
|
PIXELS.fill(0) # NeoPixel strip
|
||||||
|
PIXELS.show()
|
||||||
|
|
||||||
|
ENCODER = rotaryio.IncrementalEncoder(board.A2, board.A3)
|
||||||
|
|
||||||
|
# LED ANIMATIONS -----------------------------------------------------------
|
||||||
|
|
||||||
|
COMET = Comet(PIXELS, speed=SPEED, tail_length=8,
|
||||||
|
color=PURPLE, bounce=True)
|
||||||
|
CP_COMET = Comet(cp.pixels, speed=SPEED, tail_length=8,
|
||||||
|
color=PURPLE, bounce=True)
|
||||||
|
DARK_RINGS = Solid(PIXELS, color=BLACK)
|
||||||
|
DARK_CPB = Solid(cp.pixels, color=BLACK)
|
||||||
|
DARK = AnimationGroup(
|
||||||
|
DARK_RINGS,
|
||||||
|
DARK_CPB,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Animations Playlist, reorder as desired. AnimationGroups play at same time
|
||||||
|
ANIMATIONS = AnimationGroup(
|
||||||
|
COMET,
|
||||||
|
CP_COMET,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# MAIN LOOP ----------------------------------------------------------------
|
||||||
|
|
||||||
|
LAST_POSITION = ENCODER.position
|
||||||
|
MODE = 1
|
||||||
|
while True:
|
||||||
|
|
||||||
|
POSITION = ENCODER.position
|
||||||
|
if POSITION != LAST_POSITION:
|
||||||
|
MOVE = POSITION - LAST_POSITION
|
||||||
|
if cp.switch:
|
||||||
|
|
||||||
|
FPS = max(MIN_FPS, min(FPS + MOVE, MAX_FPS))
|
||||||
|
SPEED = 1.0 / FPS
|
||||||
|
COMET.speed = SPEED
|
||||||
|
print("comet speed = ", SPEED)
|
||||||
|
else:
|
||||||
|
BRIGHTNESS = max(MIN_BRIGHTNESS, min(BRIGHTNESS + MOVE,
|
||||||
|
MAX_BRIGHTNESS))
|
||||||
|
LEVEL = BRIGHTNESS * 0.1
|
||||||
|
if LEVEL > 1:
|
||||||
|
LEVEL = 1
|
||||||
|
cp.pixels.brightness = LEVEL
|
||||||
|
PIXELS.brightness = LEVEL
|
||||||
|
print("brightness = ", LEVEL)
|
||||||
|
LAST_POSITION = POSITION
|
||||||
|
if not BUTTON_VALUE and BUTTON_STATE is None:
|
||||||
|
BUTTON_STATE = "pressed"
|
||||||
|
if BUTTON_VALUE and BUTTON_STATE == "pressed":
|
||||||
|
print("Button pressed.")
|
||||||
|
if MODE == 1:
|
||||||
|
MODE = 2
|
||||||
|
else:
|
||||||
|
MODE = 1
|
||||||
|
BUTTON_STATE = None
|
||||||
|
if MODE == 1:
|
||||||
|
ANIMATIONS.animate()
|
||||||
|
else:
|
||||||
|
DARK.animate()
|
||||||
Loading…
Reference in a new issue