66 lines
1.5 KiB
Python
66 lines
1.5 KiB
Python
import neopixel
|
|
from machine import Pin
|
|
import time
|
|
from random import randint, random, seed
|
|
|
|
seed()
|
|
|
|
ws_pin = 0
|
|
led_zahl = 64
|
|
helligkeit = 0.05
|
|
|
|
matrix = neopixel.NeoPixel(Pin(ws_pin), led_zahl)
|
|
|
|
taster_hoch = Pin(1, Pin.IN, Pin.PULL_UP)
|
|
taster_runter = Pin(2, Pin.IN, Pin.PULL_UP)
|
|
taster_rechts = Pin(3, Pin.IN, Pin.PULL_UP)
|
|
taster_links = Pin(4, Pin.IN, Pin.PULL_UP)
|
|
|
|
scalar = float # a scale value (0.0 to 1.0)
|
|
def hsv2rgb(h:scalar, s:scalar, v:scalar) -> tuple:
|
|
if s:
|
|
if h == 1.0: h = 0.0
|
|
i = int(h*6.0); f = h*6.0 - i
|
|
|
|
w = int(255*( v * (1.0 - s) ))
|
|
q = int(255*( v * (1.0 - s * f) ))
|
|
t = int(255*( v * (1.0 - s * (1.0 - f)) ))
|
|
v = int(255*v)
|
|
|
|
if i==0: return (v, t, w)
|
|
if i==1: return (q, v, w)
|
|
if i==2: return (w, v, t)
|
|
if i==3: return (w, q, v)
|
|
if i==4: return (t, w, v)
|
|
if i==5: return (v, w, q)
|
|
else: v = int(255*v); return (v, v, v)
|
|
|
|
def zufall_farbe():
|
|
return hsv2rgb(random(), 1.0, 1.0)
|
|
|
|
def setze_helligkeit(farbe):
|
|
r, g, b = farbe
|
|
r = int(r * helligkeit)
|
|
g = int(g * helligkeit)
|
|
b = int(b * helligkeit)
|
|
return (r, g, b)
|
|
|
|
def setze_pixel(x, y, farbe):
|
|
farbe = setze_helligkeit(farbe)
|
|
i = y * 8 + x
|
|
matrix[i] = farbe
|
|
|
|
def neue_position():
|
|
x = randint(0, 7)
|
|
y = randint(0, 7)
|
|
return (x, y)
|
|
|
|
while True:
|
|
matrix.fill((0, 0, 0))
|
|
|
|
(x, y) = neue_position()
|
|
setze_pixel(x, y, zufall_farbe())
|
|
|
|
matrix.write()
|
|
time.sleep(0.5)
|