diff options
author | Radomir Dopieralski <openstack@sheep.art.pl> | 2016-10-19 22:09:51 +0200 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2016-10-25 14:21:07 +1100 |
commit | 984a867341970f311a143906d62c74fa1bfb93fb (patch) | |
tree | 283e0d2b2a5db15cfbf1e36735a2f38b203162a1 /esp8266/scripts/neopixel.py | |
parent | f1b2b1b600cd21d4835c3ad6c784eaafd215c046 (diff) |
esp8266/scripts: Make neopixel/apa102 handle 4bpp LEDs with common code.
The NeoPixel class now handles 4 bytes-per-pixel LEDs (extra byte is
intensity) and arbitrary byte ordering. APA102 class is now derived from
NeoPixel to reduce code size and support fill() operation.
Diffstat (limited to 'esp8266/scripts/neopixel.py')
-rw-r--r-- | esp8266/scripts/neopixel.py | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/esp8266/scripts/neopixel.py b/esp8266/scripts/neopixel.py index 8aa034868..b13424d7d 100644 --- a/esp8266/scripts/neopixel.py +++ b/esp8266/scripts/neopixel.py @@ -3,29 +3,30 @@ from esp import neopixel_write + class NeoPixel: - def __init__(self, pin, n): + ORDER = (1, 0, 2, 3) + + def __init__(self, pin, n, bpp=3): self.pin = pin self.n = n - self.buf = bytearray(n * 3) + self.bpp = bpp + self.buf = bytearray(n * bpp) self.pin.init(pin.OUT) def __setitem__(self, index, val): - r, g, b = val - self.buf[index * 3] = g - self.buf[index * 3 + 1] = r - self.buf[index * 3 + 2] = b + offset = index * self.bpp + for i in range(self.bpp): + self.buf[offset + self.ORDER[i]] = val[i] def __getitem__(self, index): - i = index * 3 - return self.buf[i + 1], self.buf[i], self.buf[i + 2] + offset = index * self.bpp + return tuple(self.buf[offset + self.ORDER[i]] + for i in range(self.bpp)) def fill(self, color): - r, g, b = color - for i in range(len(self.buf) / 3): - self.buf[i * 3] = g - self.buf[i * 3 + 1] = r - self.buf[i * 3 + 2] = b + for i in range(self.n): + self[i] = color def write(self): neopixel_write(self.pin, self.buf, True) |