Skip to content

code for Infinity Mirror Coaster #998

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 21, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 86 additions & 0 deletions ItsyBitsy_Infinity_Mirror/code.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
"""
NeoPixel Animator code for ItsyBitsy nRF52840 NeoPixel Animation and Color Remote Control.
"""

import board
import neopixel
from adafruit_led_animation.animation import Comet, Sparkle, AnimationGroup,\
AnimationSequence
import adafruit_led_animation.color as color

from adafruit_ble import BLERadio
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
from adafruit_ble.services.nordic import UARTService

from adafruit_bluefruit_connect.packet import Packet
from adafruit_bluefruit_connect.color_packet import ColorPacket
from adafruit_bluefruit_connect.button_packet import ButtonPacket

# The number of NeoPixels in the externally attached strip
# If using two strips connected to the same pin, count only one strip for this number!
STRIP_PIXEL_NUMBER = 43

# Setup for comet animation
COMET_SPEED = 0.05 # Lower numbers increase the animation speed
STRIP_COMET_TAIL_LENGTH = 10 # The length of the comet on the NeoPixel strip
STRIP_COMET_BOUNCE = False # Set to False to stop comet from "bouncing" on NeoPixel strip

# Setup for sparkle animation
SPARKLE_SPEED = 0.1 # Lower numbers increase the animation speed

# Create the NeoPixel strip
strip_pixels = neopixel.NeoPixel(board.D5, STRIP_PIXEL_NUMBER, auto_write=False)

# Setup BLE connection
ble = BLERadio()
uart = UARTService()
advertisement = ProvideServicesAdvertisement(uart)

# Setup animations
animations = AnimationSequence(
AnimationGroup(
Comet(strip_pixels, COMET_SPEED, color.TEAL, tail_length=STRIP_COMET_TAIL_LENGTH,
bounce=STRIP_COMET_BOUNCE)
),
AnimationGroup(
Sparkle(strip_pixels, SPARKLE_SPEED, color.TEAL)
),
)

animation_color = None
mode = 0
blanked = False

while True:
ble.start_advertising(advertisement) # Start advertising.
was_connected = False
while not was_connected or ble.connected:
if not blanked: # If LED-off signal is not being sent...
animations.animate() # Run the animations.
if ble.connected: # If BLE is connected...
was_connected = True
if uart.in_waiting: # Check to see if any data is available from the Remote Control.
try:
packet = Packet.from_stream(uart) # Create the packet object.
except ValueError:
continue
if isinstance(packet, ColorPacket): # If the packet is color packet...
if mode == 0: # And mode is 0...
animations.color = packet.color # Update the animation to the color.
print("Color:", packet.color)
animation_color = packet.color # Keep track of the current color...
elif mode == 1: # Because if mode is 1...
animations.color = animation_color # Freeze the animation color.
print("Color:", animation_color)
elif isinstance(packet, ButtonPacket): # If the packet is a button packet...
if packet.pressed: # If the buttons on the Remote Control are pressed...
if packet.button == ButtonPacket.LEFT: # If button A is pressed...
print("A pressed: animation mode changed.")
animations.next() # Change to the next animation.
elif packet.button == ButtonPacket.RIGHT: # If button B is pressed...
mode += 1 # Increase the mode by 1.
if mode == 1: # If mode is 1, print the following:
print("B pressed: color frozen!")
if mode > 1: # If mode is > 1...
mode = 0 # Set mode to 0, and print the following:
print("B pressed: color changing!")