Remove _step suffix from pattern methods and add new rainbow patterns
- Renamed all pattern methods to remove _step suffix for cleaner API - Renamed rainbow_cycle_strip to rainbow_spiral for better naming - Added new rainbow_strips pattern where each strip is a single color - Updated patterns dictionary to use new method names - Improved code readability and consistency
This commit is contained in:
parent
6fc22fb4f4
commit
ac2013769c
|
@ -26,15 +26,17 @@ class Patterns:
|
||||||
self.patterns = {
|
self.patterns = {
|
||||||
"off": self.off,
|
"off": self.off,
|
||||||
"on" : self.on,
|
"on" : self.on,
|
||||||
"color_wipe": self.color_wipe_step,
|
"color_wipe": self.color_wipe,
|
||||||
"rainbow_cycle": self.rainbow_cycle_step,
|
"rainbow_cycle": self.rainbow_cycle,
|
||||||
"theater_chase": self.theater_chase_step,
|
"rainbow_spiral": self.rainbow_spiral, # Rainbow cycle per strip
|
||||||
"blink": self.blink_step,
|
"rainbow_strips": self.rainbow_strips, # New: Single color per strip, rainbow between strips
|
||||||
"color_transition": self.color_transition_step, # Added new pattern
|
"theater_chase": self.theater_chase,
|
||||||
"flicker": self.flicker_step,
|
"blink": self.blink,
|
||||||
"scanner": self.scanner_step, # New: Single direction scanner
|
"color_transition": self.color_transition, # Added new pattern
|
||||||
"bidirectional_scanner": self.bidirectional_scanner_step, # New: Bidirectional scanner
|
"flicker": self.flicker,
|
||||||
"strip_cycle": self.strip_cycle_step, # New: Cycle through strips
|
"scanner": self.scanner, # New: Single direction scanner
|
||||||
|
"bidirectional_scanner": self.bidirectional_scanner, # New: Bidirectional scanner
|
||||||
|
"strip_cycle": self.strip_cycle, # New: Cycle through strips
|
||||||
"external": None
|
"external": None
|
||||||
}
|
}
|
||||||
self.selected = selected
|
self.selected = selected
|
||||||
|
@ -229,7 +231,7 @@ class Patterns:
|
||||||
def on(self):
|
def on(self):
|
||||||
self.fill(self.apply_brightness(self.colors[0]))
|
self.fill(self.apply_brightness(self.colors[0]))
|
||||||
|
|
||||||
def color_wipe_step(self):
|
def color_wipe(self):
|
||||||
color = self.apply_brightness(self.colors[0])
|
color = self.apply_brightness(self.colors[0])
|
||||||
current_time = utime.ticks_ms()
|
current_time = utime.ticks_ms()
|
||||||
if utime.ticks_diff(current_time, self.last_update) >= self.delay:
|
if utime.ticks_diff(current_time, self.last_update) >= self.delay:
|
||||||
|
@ -246,7 +248,7 @@ class Patterns:
|
||||||
self.pattern_step = 0
|
self.pattern_step = 0
|
||||||
self.last_update = current_time
|
self.last_update = current_time
|
||||||
|
|
||||||
def rainbow_cycle_step(self):
|
def rainbow_cycle(self):
|
||||||
current_time = utime.ticks_ms()
|
current_time = utime.ticks_ms()
|
||||||
if utime.ticks_diff(current_time, self.last_update) >= self.delay/5:
|
if utime.ticks_diff(current_time, self.last_update) >= self.delay/5:
|
||||||
def wheel(pos):
|
def wheel(pos):
|
||||||
|
@ -267,7 +269,7 @@ class Patterns:
|
||||||
self.pattern_step = (self.pattern_step + 1) % 256
|
self.pattern_step = (self.pattern_step + 1) % 256
|
||||||
self.last_update = current_time
|
self.last_update = current_time
|
||||||
|
|
||||||
def theater_chase_step(self):
|
def theater_chase(self):
|
||||||
current_time = utime.ticks_ms()
|
current_time = utime.ticks_ms()
|
||||||
if utime.ticks_diff(current_time, self.last_update) >= self.delay:
|
if utime.ticks_diff(current_time, self.last_update) >= self.delay:
|
||||||
total_leds = sum(len(strip) for strip in self.strips)
|
total_leds = sum(len(strip) for strip in self.strips)
|
||||||
|
@ -280,7 +282,7 @@ class Patterns:
|
||||||
self.pattern_step = (self.pattern_step + 1) % 3
|
self.pattern_step = (self.pattern_step + 1) % 3
|
||||||
self.last_update = current_time
|
self.last_update = current_time
|
||||||
|
|
||||||
def blink_step(self):
|
def blink(self):
|
||||||
current_time = utime.ticks_ms()
|
current_time = utime.ticks_ms()
|
||||||
if utime.ticks_diff(current_time, self.last_update) >= self.delay:
|
if utime.ticks_diff(current_time, self.last_update) >= self.delay:
|
||||||
if self.pattern_step % 2 == 0:
|
if self.pattern_step % 2 == 0:
|
||||||
|
@ -290,7 +292,7 @@ class Patterns:
|
||||||
self.pattern_step = (self.pattern_step + 1) % 2
|
self.pattern_step = (self.pattern_step + 1) % 2
|
||||||
self.last_update = current_time
|
self.last_update = current_time
|
||||||
|
|
||||||
def color_transition_step(self):
|
def color_transition(self):
|
||||||
current_time = utime.ticks_ms()
|
current_time = utime.ticks_ms()
|
||||||
|
|
||||||
# Check for hold duration first
|
# Check for hold duration first
|
||||||
|
@ -338,7 +340,7 @@ class Patterns:
|
||||||
|
|
||||||
self.last_update = current_time
|
self.last_update = current_time
|
||||||
|
|
||||||
def flicker_step(self):
|
def flicker(self):
|
||||||
current_time = utime.ticks_ms()
|
current_time = utime.ticks_ms()
|
||||||
if utime.ticks_diff(current_time, self.last_update) >= self.delay/5:
|
if utime.ticks_diff(current_time, self.last_update) >= self.delay/5:
|
||||||
base_color = self.colors[0]
|
base_color = self.colors[0]
|
||||||
|
@ -351,7 +353,7 @@ class Patterns:
|
||||||
self.fill(flicker_color)
|
self.fill(flicker_color)
|
||||||
self.last_update = current_time
|
self.last_update = current_time
|
||||||
|
|
||||||
def scanner_step(self):
|
def scanner(self):
|
||||||
"""
|
"""
|
||||||
Mimics a 'Knight Rider' style scanner, moving in one direction.
|
Mimics a 'Knight Rider' style scanner, moving in one direction.
|
||||||
"""
|
"""
|
||||||
|
@ -386,7 +388,7 @@ class Patterns:
|
||||||
|
|
||||||
self.last_update = current_time
|
self.last_update = current_time
|
||||||
|
|
||||||
def bidirectional_scanner_step(self):
|
def bidirectional_scanner(self):
|
||||||
"""
|
"""
|
||||||
Mimics a 'Knight Rider' style scanner, moving back and forth.
|
Mimics a 'Knight Rider' style scanner, moving back and forth.
|
||||||
"""
|
"""
|
||||||
|
@ -426,7 +428,7 @@ class Patterns:
|
||||||
|
|
||||||
self.last_update = current_time
|
self.last_update = current_time
|
||||||
|
|
||||||
def strip_cycle_step(self):
|
def strip_cycle(self):
|
||||||
"""
|
"""
|
||||||
Cycles through each strip, turning them on and off one by one.
|
Cycles through each strip, turning them on and off one by one.
|
||||||
"""
|
"""
|
||||||
|
@ -450,3 +452,63 @@ class Patterns:
|
||||||
self.pattern_step += 1
|
self.pattern_step += 1
|
||||||
|
|
||||||
self.last_update = current_time
|
self.last_update = current_time
|
||||||
|
|
||||||
|
def rainbow_spiral(self):
|
||||||
|
"""
|
||||||
|
Creates a rainbow effect that cycles through each strip individually.
|
||||||
|
Each strip shows its own rainbow pattern.
|
||||||
|
"""
|
||||||
|
current_time = utime.ticks_ms()
|
||||||
|
if utime.ticks_diff(current_time, self.last_update) >= self.delay/5:
|
||||||
|
def wheel(pos):
|
||||||
|
if pos < 85:
|
||||||
|
return (pos * 3, 255 - pos * 3, 0)
|
||||||
|
elif pos < 170:
|
||||||
|
pos -= 85
|
||||||
|
return (255 - pos * 3, 0, pos * 3)
|
||||||
|
else:
|
||||||
|
pos -= 170
|
||||||
|
return (0, pos * 3, 255 - pos * 3)
|
||||||
|
|
||||||
|
# Apply rainbow to each strip individually
|
||||||
|
for strip_idx, strip in enumerate(self.strips):
|
||||||
|
strip_length = len(strip)
|
||||||
|
for i in range(strip_length):
|
||||||
|
# Each strip gets its own rainbow cycle with offset based on strip index
|
||||||
|
rc_index = (i * 256 // strip_length) + self.pattern_step + (strip_idx * 32)
|
||||||
|
strip[i] = self.apply_brightness(wheel(rc_index & 255))
|
||||||
|
|
||||||
|
self.write()
|
||||||
|
self.pattern_step = (self.pattern_step + 1) % 256
|
||||||
|
self.last_update = current_time
|
||||||
|
|
||||||
|
def rainbow_strips(self):
|
||||||
|
"""
|
||||||
|
Each strip is a single color, rainbow effect is between strips.
|
||||||
|
Creates a rainbow pattern across the 8 strips.
|
||||||
|
"""
|
||||||
|
current_time = utime.ticks_ms()
|
||||||
|
if utime.ticks_diff(current_time, self.last_update) >= self.delay/5:
|
||||||
|
def wheel(pos):
|
||||||
|
if pos < 85:
|
||||||
|
return (pos * 3, 255 - pos * 3, 0)
|
||||||
|
elif pos < 170:
|
||||||
|
pos -= 85
|
||||||
|
return (255 - pos * 3, 0, pos * 3)
|
||||||
|
else:
|
||||||
|
pos -= 170
|
||||||
|
return (0, pos * 3, 255 - pos * 3)
|
||||||
|
|
||||||
|
# Each strip gets a single color from the rainbow
|
||||||
|
for strip_idx, strip in enumerate(self.strips):
|
||||||
|
# Calculate rainbow position for this strip
|
||||||
|
rainbow_pos = (strip_idx * 32 + self.pattern_step) % 256
|
||||||
|
color = self.apply_brightness(wheel(rainbow_pos))
|
||||||
|
|
||||||
|
# Fill entire strip with this single color
|
||||||
|
for i in range(len(strip)):
|
||||||
|
strip[i] = color
|
||||||
|
|
||||||
|
self.write()
|
||||||
|
self.pattern_step = (self.pattern_step + 1) % 256
|
||||||
|
self.last_update = current_time
|
||||||
|
|
Loading…
Reference in New Issue