Source code for BiblioPixelAnimations.strip.PixelPingPong

# ## PixelPingPong ##
# This animation runs 1 or many pixels from one end of a strip to the other.
#
# ### Usage ###
# Alternates has 4 optional properties
#
# * max_led - int the number of pixels you want used
# * color - (int, int, int) the color you want the pixels to be
# * additional_pixels - int the number of pixels you want to ping pong
# * fade_delay - int the number of frames for the trailing pixels to fade to black
#
# In code:
#
#   from PixelPingPong import PixelPingPong
#   ...
#   anim = PixelPingPong(led, max_led=30, color=(0, 0, 255), additional_pixels=5, fade_delay=2)
#
# Best run in the region of 5-200 FPS

from bibliopixel.animation.strip import Strip


[docs]class PixelPingPong(Strip): COLOR_DEFAULTS = ('color', (255, 255, 255)), def __init__(self, layout, max_led=None, total_pixels=1, fade_delay=1, **kwds): super().__init__(layout, 0, -1, **kwds) self._current = 0 self._minLed = 0 self._maxLed = max_led if self._maxLed is None or self._maxLed < self._minLed: self._maxLed = self.layout.numLEDs - 1 self._additionalPixels = total_pixels - 1 self._positive = True self._fade_delay = fade_delay if fade_delay >= 1 else 1 color = self.palette(0) self._fade_increment = tuple(x / self._fade_delay for x in color)
[docs] def pre_run(self): self._step = 0
[docs] def step(self, amt=1): # fade last frame's pixels for i in range(0, self._maxLed + 1): faded_color = tuple(x - self._fade_increment[i] if x > self._fade_increment[i] else 0 for (i, x) in enumerate(self.layout.get(i))) self.layout.fill(faded_color, i, i) self.layout.fill( self.palette(0), self._current, self._current + self._additionalPixels) if self._positive: self._current += 1 else: self._current -= 1 if self._current + self._additionalPixels == self._maxLed: self._positive = False if self._current == self._minLed: self._positive = True