diff --git a/src/patterns.py b/src/patterns.py index f2385f8..099ac36 100644 --- a/src/patterns.py +++ b/src/patterns.py @@ -25,6 +25,7 @@ class Patterns: "random_theater_chase": self.random_theater_chase_step, "random_blink": self.random_blink_step, "color_transition": self.color_transition_step, + "flicker": self.flicker_step, # Added the new flicker pattern "external": None } self.selected = selected @@ -150,8 +151,9 @@ class Patterns: return True return False - def apply_brightness(self, color): - return tuple(int(c * self.brightness / 255) for c in color) + def apply_brightness(self, color, brightness_override=None): + effective_brightness = brightness_override if brightness_override is not None else self.brightness + return tuple(int(c * effective_brightness / 255) for c in color) def select(self, pattern): if pattern in self.patterns: @@ -364,3 +366,16 @@ class Patterns: self.hold_start_time = current_time self.last_update = current_time + + def flicker_step(self): + current_time = utime.ticks_ms() + if utime.ticks_diff(current_time, self.last_update) >= self.delay/5: + base_color = self.colors[0] + # Increase the range for flicker_brightness_offset + # Changed from self.brightness // 4 to self.brightness // 2 (or even self.brightness for max intensity) + flicker_brightness_offset = random.randint(-int(self.brightness // 1.5), int(self.brightness // 1.5)) + flicker_brightness = max(0, min(255, self.brightness + flicker_brightness_offset)) + + flicker_color = self.apply_brightness(base_color, brightness_override=flicker_brightness) + self.fill(flicker_color) + self.last_update = current_time