import machine, neopixel
import time
import urandom
PIN = 15 # Datenpin z.B. an GPIO 0
WIDTH = 8
HEIGHT = 8
NUM_LEDS = WIDTH * HEIGHT
np = neopixel.NeoPixel(machine.Pin(PIN), NUM_LEDS)
# Hilfsfunktionen
def clear():
for i in range(NUM_LEDS):
np[i] = (0, 0, 0)
np.write()
def set_pixel(x, y, color):
index = y * WIDTH + x if y % 2 == 0 else y * WIDTH + (WIDTH - 1 - x)
np[index] = color
def random_color():
return (urandom.getrandbits(8), urandom.getrandbits(8), urandom.getrandbits(8))
# Lichteffekte
def effect_rainbow():
for j in range(256):
for i in range(NUM_LEDS):
np[i] = wheel((int(i * 256 / NUM_LEDS) + j) & 255)
np.write()
time.sleep(0.01)
def wheel(pos):
if pos < 85:
return (int(pos * 3), int(255 - pos * 3), 0)
elif pos < 170:
pos -= 85
return (int(255 - pos * 3), 0, int(pos * 3))
else:
pos -= 170
return (0, int(pos * 3), int(255 - pos * 3))
def effect_random_pixels():
for _ in range(50):
i = urandom.getrandbits(6)
np[i] = random_color()
np.write()
time.sleep(0.05)
def effect_snake():
for i in range(NUM_LEDS):
clear()
np[i] = (0, 255, 0)
np.write()
time.sleep(0.05)
def effect_blink_all(color):
for _ in range(5):
for i in range(NUM_LEDS):
np[i] = color
np.write()
time.sleep(0.3)
clear()
time.sleep(0.3)
def effect_wave():
for y in range(HEIGHT):
for x in range(WIDTH):
clear()
set_pixel(x, y, (0, 0, 255))
np.write()
time.sleep(0.05)
def effect_diagonal():
for i in range(HEIGHT + WIDTH):
clear()
for y in range(HEIGHT):
x = i - y
if 0 <= x < WIDTH:
set_pixel(x, y, (255, 255, 0))
np.write()
time.sleep(0.1)
def effect_checkerboard():
for _ in range(5):
for y in range(HEIGHT):
for x in range(WIDTH):
if (x + y) % 2 == 0:
set_pixel(x, y, (255, 255, 255))
else:
set_pixel(x, y, (0, 0, 0))
np.write()
time.sleep(0.5)
clear()
time.sleep(0.5)
def effect_fade(color):
for i in range(0, 256, 5):
for j in range(NUM_LEDS):
np[j] = tuple(min(int(c * i / 255), 255) for c in color)
np.write()
time.sleep(0.01)
def effect_border():
for y in range(HEIGHT):
for x in range(WIDTH):
if y == 0 or y == HEIGHT - 1 or x == 0 or x == WIDTH - 1:
set_pixel(x, y, (255, 0, 0))
np.write()
time.sleep(0.5)
# Liste der Effekte
effects = [
effect_rainbow,
effect_random_pixels,
lambda: effect_blink_all((255, 0, 0)),
lambda: effect_blink_all((0, 255, 0)),
lambda: effect_blink_all((0, 0, 255)),
effect_snake,
effect_wave,
effect_diagonal,
effect_checkerboard,
lambda: effect_fade((255, 0, 0)),
lambda: effect_fade((0, 255, 0)),
lambda: effect_fade((0, 0, 255)),
lambda: effect_fade((255, 255, 0)),
effect_border,
lambda: effect_blink_all(random_color()),
lambda: effect_blink_all(random_color()),
lambda: effect_blink_all(random_color()),
lambda: effect_wave(),
lambda: effect_snake(),
lambda: effect_checkerboard(),
]
# Hauptloop
while True:
for effect in effects:
clear()
effect()
time.sleep(0.5)