import random import utime class Fireflies: def __init__(self, driver): self.driver = driver def run(self, preset): colors = preset.c if preset.c else [(255, 210, 80), (120, 255, 120)] count = max(1, int(preset.n1) if int(preset.n1) > 0 else 6) speed = max(1, int(preset.n2) if int(preset.n2) > 0 else 8) bugs = [[random.randint(0, max(0, self.driver.num_leds - 1)), random.randint(0, 255)] for _ in range(count)] last = utime.ticks_ms() while True: d = max(1, int(preset.d)) now = utime.ticks_ms() if utime.ticks_diff(now, last) >= d: bg_color = self.driver.apply_brightness(preset.background_or(colors), preset.b) for i in range(self.driver.num_leds): self.driver.n[i] = bg_color for b in bugs: idx, ph = b tri = 255 - abs(128 - ph) * 2 c = self.driver.apply_brightness(colors[idx % len(colors)], preset.b) self.driver.n[idx] = ((c[0]*tri)//255, (c[1]*tri)//255, (c[2]*tri)//255) b[1] = (ph + speed) & 255 if random.randint(0, 31) == 0: b[0] = random.randint(0, max(0, self.driver.num_leds - 1)) self.driver.n.write() last = utime.ticks_add(last, d) if not preset.a: yield return yield