Merge pull request #116 from tylerwinfield/main
Restores min_intensity and max_intensity for Pulse animation and smoother transition option
This commit is contained in:
commit
251bcd13cf
3 changed files with 33 additions and 5 deletions
|
|
@ -37,12 +37,28 @@ class Pulse(Animation):
|
|||
:param float speed: Animation refresh rate in seconds, e.g. ``0.1``.
|
||||
:param color: Animation color in ``(r, g, b)`` tuple, or ``0x000000`` hex format.
|
||||
:param period: Period to pulse the LEDs over. Default 5.
|
||||
:param breath: Duration to hold minimum and maximum intensity levels. Default 0.
|
||||
:param min_intensity: Lowest brightness level of the pulse. Default 0.
|
||||
:param max_intensity: Highest brightness elvel of the pulse. Default 1.
|
||||
"""
|
||||
|
||||
# pylint: disable=too-many-arguments
|
||||
def __init__(self, pixel_object, speed, color, period=5, name=None):
|
||||
def __init__(
|
||||
self,
|
||||
pixel_object,
|
||||
speed,
|
||||
color,
|
||||
period=5,
|
||||
breath=0,
|
||||
min_intensity=0,
|
||||
max_intensity=1,
|
||||
name=None,
|
||||
):
|
||||
super().__init__(pixel_object, speed, color, name=name)
|
||||
self._period = period
|
||||
self.breath = breath
|
||||
self.min_intensity = min_intensity
|
||||
self.max_intensity = max_intensity
|
||||
self._generator = None
|
||||
self.reset()
|
||||
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ class SparklePulse(Sparkle):
|
|||
:param int speed: Animation refresh rate in seconds, e.g. ``0.1``.
|
||||
:param color: Animation color in ``(r, g, b)`` tuple, or ``0x000000`` hex format.
|
||||
:param period: Period to pulse the LEDs over. Default 5.
|
||||
:param breath: Duration to hold minimum and maximum intensity. Default 0.
|
||||
:param max_intensity: The maximum intensity to pulse, between 0 and 1.0. Default 1.
|
||||
:param min_intensity: The minimum intensity to pulse, between 0 and 1.0. Default 0.
|
||||
"""
|
||||
|
|
@ -49,13 +50,15 @@ class SparklePulse(Sparkle):
|
|||
speed,
|
||||
color,
|
||||
period=5,
|
||||
breath=0,
|
||||
max_intensity=1,
|
||||
min_intensity=0,
|
||||
name=None,
|
||||
):
|
||||
self._max_intensity = max_intensity
|
||||
self._min_intensity = min_intensity
|
||||
self._period = period
|
||||
self.breath = breath
|
||||
self.min_intensity = min_intensity
|
||||
self.max_intensity = max_intensity
|
||||
dotstar = len(pixel_object) == 4 and isinstance(pixel_object[0][-1], float)
|
||||
super().__init__(
|
||||
pixel_object, speed=speed, color=color, num_sparkles=1, name=name
|
||||
|
|
|
|||
|
|
@ -322,7 +322,8 @@ def pulse_generator(period: float, animation_object, dotstar_pwm=False):
|
|||
:param animation_object: An animation object to interact with.
|
||||
:param dotstar_pwm: Whether to use the dostar per pixel PWM value for brightness control.
|
||||
"""
|
||||
period = int(period * MS_PER_SECOND)
|
||||
period = int((period + (animation_object.breath * 2)) * MS_PER_SECOND)
|
||||
half_breath = int(animation_object.breath * MS_PER_SECOND // 2)
|
||||
half_period = period // 2
|
||||
|
||||
last_update = monotonic_ms()
|
||||
|
|
@ -338,7 +339,15 @@ def pulse_generator(period: float, animation_object, dotstar_pwm=False):
|
|||
last_pos = pos
|
||||
if pos > half_period:
|
||||
pos = period - pos
|
||||
intensity = pos / half_period
|
||||
if pos < half_breath:
|
||||
intensity = animation_object.min_intensity
|
||||
elif pos > (half_period - half_breath):
|
||||
intensity = animation_object.max_intensity
|
||||
else:
|
||||
intensity = animation_object.min_intensity + (
|
||||
((pos - half_breath) / (half_period - (half_breath * 2)))
|
||||
* (animation_object.max_intensity - animation_object.min_intensity)
|
||||
)
|
||||
if dotstar_pwm:
|
||||
fill_color = (
|
||||
animation_object.color[0],
|
||||
|
|
|
|||
Loading…
Reference in a new issue