Tom Mount 2024-04-08 17:47:51 +02:00 zatwierdzone przez GitHub
commit f72f1d2616
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
3 zmienionych plików z 46 dodań i 2 usunięć

Wyświetl plik

@ -1,3 +1,3 @@
metadata(description="WS2812/NeoPixel driver.", version="0.1.0")
metadata(description="WS2812/NeoPixel driver.", version="0.2.0")
module("neopixel.py", opt=3)

Wyświetl plik

@ -8,10 +8,11 @@ class NeoPixel:
# G R B W
ORDER = (1, 0, 2, 3)
def __init__(self, pin, n, bpp=3, timing=1):
def __init__(self, pin, n, bpp=3, timing=1, brightness=None):
self.pin = pin
self.n = n
self.bpp = bpp
self.b = None if brightness is None else min(max(brightness, 0), 1)
self.buf = bytearray(n * bpp)
self.pin.init(pin.OUT)
# Timing arg can either be 1 for 800kHz or 0 for 400kHz,
@ -22,11 +23,17 @@ class NeoPixel:
else timing
)
def _b(self, v):
if self.b is not None:
return tuple(round(c * self.b) for c in v)
return v
def __len__(self):
return self.n
def __setitem__(self, i, v):
offset = i * self.bpp
v = self._b(v)
for i in range(self.bpp):
self.buf[offset + self.ORDER[i]] = v[i]
@ -35,6 +42,7 @@ class NeoPixel:
return tuple(self.buf[offset + self.ORDER[i]] for i in range(self.bpp))
def fill(self, v):
v = self._b(v)
b = self.buf
l = len(self.buf)
bpp = self.bpp
@ -45,6 +53,13 @@ class NeoPixel:
b[j] = c
j += bpp
def brightness(self, b=None):
if b is None:
return self.b
self.b = min(max(b, 0), 1)
for i in range(self.n * self.bpp):
self.buf[i] = round(self.buf[i] * self.b)
def write(self):
# BITSTREAM_TYPE_HIGH_LOW = 0
bitstream(self.pin, 0, self.timing, self.buf)

Wyświetl plik

@ -0,0 +1,29 @@
import machine
import neopixel
def neopixel_test():
np = neopixel.NeoPixel(machine.Pin(1), 3)
print("Fill with a color.")
np.fill((255, 128, 64))
print("Verify the bytes to be written")
expected = bytearray([255, 128, 64, 255, 128, 64, 255, 128, 64])
actual = np.buf
passed = "passed" if expected == actual else "failed"
print(f"Initial fill: {passed}.")
print()
print("Change brightness of all pixels.")
np.brightness(0.5)
expected = bytearray([127, 64, 32, 127, 64, 32, 127, 64, 32])
actual = np.buf
passed = "passed" if expected == actual else "failed"
print(f"Brightness change: {passed}.")
print()
print("Get current brightness.")
expected = 0.5
actual = np.brightness()
passed = "passed" if expected == actual else "failed"
print(f"Brightness get: {passed}.")
print()