commit
3dbe521a49
3 changed files with 156 additions and 0 deletions
85
adafruit_led_animation/animation/customcolorchase.py
Normal file
85
adafruit_led_animation/animation/customcolorchase.py
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
# The MIT License (MIT)
|
||||
#
|
||||
# Copyright (c) 2019-2020 Roy Hooper
|
||||
# Copyright (c) 2020 Kattni Rembor for Adafruit Industries
|
||||
# Copyright (c) 2020 Connie Sieh
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
"""
|
||||
`adafruit_led_animation.animation.customcolorchase`
|
||||
================================================================================
|
||||
|
||||
Custom color chase animation for CircuitPython helper library for LED animations.
|
||||
|
||||
* Author(s): Roy Hooper, Kattni Rembor, Connie Sieh
|
||||
|
||||
Implementation Notes
|
||||
--------------------
|
||||
|
||||
**Hardware:**
|
||||
|
||||
* `Adafruit NeoPixels <https://www.adafruit.com/category/168>`_
|
||||
* `Adafruit DotStars <https://www.adafruit.com/category/885>`_
|
||||
|
||||
**Software and Dependencies:**
|
||||
|
||||
* Adafruit CircuitPython firmware for the supported boards:
|
||||
https://circuitpython.org/downloads
|
||||
|
||||
|
||||
"""
|
||||
|
||||
from adafruit_led_animation.animation.chase import Chase
|
||||
from adafruit_led_animation.color import RAINBOW
|
||||
|
||||
|
||||
class CustomColorChase(Chase):
|
||||
"""
|
||||
Chase pixels in one direction, like a theater marquee with Custom Colors
|
||||
|
||||
:param pixel_object: The initialised LED object.
|
||||
:param float speed: Animation speed rate in seconds, e.g. ``0.1``.
|
||||
:param colors: Animation colors in list of `(r, g, b)`` tuple, or ``0x000000`` hex format
|
||||
:param size: Number of pixels to turn on in a row.
|
||||
:param spacing: Number of pixels to turn off in a row.
|
||||
:param reverse: Reverse direction of movement.
|
||||
"""
|
||||
|
||||
# pylint: disable=too-many-arguments
|
||||
def __init__(
|
||||
self,
|
||||
pixel_object,
|
||||
speed,
|
||||
size=2,
|
||||
spacing=3,
|
||||
reverse=False,
|
||||
name=None,
|
||||
colors=RAINBOW,
|
||||
):
|
||||
self._num_colors = len(colors)
|
||||
self._colors = colors
|
||||
self._color_idx = 0
|
||||
super().__init__(pixel_object, speed, 0, size, spacing, reverse, name)
|
||||
|
||||
def bar_color(self, n, pixel_no=0):
|
||||
return self._colors[self._color_idx - (n % len(self._colors))]
|
||||
|
||||
def on_cycle_complete(self):
|
||||
self._color_idx = (self._color_idx + self._direction) % len(self._colors)
|
||||
super().on_cycle_complete()
|
||||
|
|
@ -21,6 +21,7 @@ from adafruit_led_animation.animation.rainbowcomet import RainbowComet
|
|||
from adafruit_led_animation.animation.solid import Solid
|
||||
from adafruit_led_animation.animation.colorcycle import ColorCycle
|
||||
from adafruit_led_animation.animation.rainbow import Rainbow
|
||||
from adafruit_led_animation.animation.customcolorchase import CustomColorChase
|
||||
from adafruit_led_animation.sequence import AnimationSequence
|
||||
from adafruit_led_animation.color import PURPLE, WHITE, AMBER, JADE, MAGENTA, ORANGE
|
||||
|
||||
|
|
@ -43,6 +44,9 @@ sparkle_pulse = SparklePulse(pixels, speed=0.1, period=3, color=JADE)
|
|||
rainbow_comet = RainbowComet(pixels, speed=0.1, tail_length=7, bounce=True)
|
||||
rainbow_chase = RainbowChase(pixels, speed=0.1, size=3, spacing=2, step=8)
|
||||
rainbow_sparkle = RainbowSparkle(pixels, speed=0.1, num_sparkles=15)
|
||||
custom_color_chase = CustomColorChase(
|
||||
pixels, speed=0.1, size=2, spacing=3, colors=[ORANGE, WHITE, JADE]
|
||||
)
|
||||
|
||||
|
||||
animations = AnimationSequence(
|
||||
|
|
@ -57,6 +61,7 @@ animations = AnimationSequence(
|
|||
rainbow_comet,
|
||||
sparkle_pulse,
|
||||
rainbow_chase,
|
||||
custom_color_chase,
|
||||
advance_interval=5,
|
||||
auto_clear=True,
|
||||
)
|
||||
|
|
|
|||
66
examples/led_animation_customcolorchase.py
Normal file
66
examples/led_animation_customcolorchase.py
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
"""
|
||||
This example displays custom color chase animations in sequence, at a six second interval.
|
||||
|
||||
For NeoPixel FeatherWing. Update pixel_pin and pixel_num to match your wiring if using
|
||||
a different form of NeoPixels.
|
||||
|
||||
This example may not work on SAMD21 (M0) boards.
|
||||
"""
|
||||
import board
|
||||
import neopixel
|
||||
|
||||
from adafruit_led_animation.animation.customcolorchase import CustomColorChase
|
||||
from adafruit_led_animation.sequence import AnimationSequence
|
||||
|
||||
# colorwheel only needed for rainbowchase example
|
||||
from adafruit_led_animation.color import colorwheel
|
||||
|
||||
# Colors for customcolorchase examples
|
||||
from adafruit_led_animation.color import PINK, GREEN, RED, BLUE
|
||||
|
||||
# Update to match the pin connected to your NeoPixels
|
||||
pixel_pin = board.D5
|
||||
# Update to match the number of NeoPixels you have connected
|
||||
pixel_num = 30
|
||||
brightness = 0.3
|
||||
|
||||
pixels = neopixel.NeoPixel(
|
||||
pixel_pin, pixel_num, brightness=brightness, auto_write=False
|
||||
)
|
||||
|
||||
# colors default to RAINBOW as defined in color.py
|
||||
custom_color_chase_rainbow = CustomColorChase(pixels, speed=0.1, size=2, spacing=3)
|
||||
custom_color_chase_rainbow_r = CustomColorChase(
|
||||
pixels, speed=0.1, size=3, spacing=3, reverse=True
|
||||
)
|
||||
|
||||
# Example with same colors as RainbowChase
|
||||
steps = 30
|
||||
# This was taken from rainbowchase.py
|
||||
rainbow_colors = [colorwheel(n % 256) for n in range(0, 512, steps)]
|
||||
# Now use rainbow_colors with CustomColorChase
|
||||
custom_color_chase_rainbowchase = CustomColorChase(
|
||||
pixels, speed=0.1, colors=rainbow_colors, size=2, spacing=3
|
||||
)
|
||||
|
||||
custom_color_chase_bgp = CustomColorChase(
|
||||
pixels, speed=0.1, colors=[BLUE, GREEN, PINK], size=3, spacing=2
|
||||
)
|
||||
|
||||
# Can use integer values for color, 0 is black
|
||||
custom_color_chase_br = CustomColorChase(
|
||||
pixels, speed=0.1, colors=[BLUE, 0, RED, 0], size=2, spacing=0
|
||||
)
|
||||
|
||||
animations = AnimationSequence(
|
||||
custom_color_chase_rainbow,
|
||||
custom_color_chase_rainbow_r,
|
||||
custom_color_chase_rainbowchase,
|
||||
custom_color_chase_bgp,
|
||||
custom_color_chase_br,
|
||||
advance_interval=6,
|
||||
auto_clear=True,
|
||||
)
|
||||
|
||||
while True:
|
||||
animations.animate()
|
||||
Loading…
Reference in a new issue