From 456b1731ba978894614be74403e72ef0670071d7 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Tue, 3 Apr 2018 21:02:54 -0500 Subject: [PATCH 1/5] removed slicing for bytearray assignments; non-express boards don't implement array slicing --- adafruit_trellis.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/adafruit_trellis.py b/adafruit_trellis.py index af0a16e..22f3077 100644 --- a/adafruit_trellis.py +++ b/adafruit_trellis.py @@ -82,8 +82,8 @@ def __getitem__(self, x): raise ValueError(('LED number must be between 0 -', self._parent._num_leds - 1)) led = ledLUT[x % 16] >> 4 mask = 1 << (ledLUT[x % 16] & 0x0f) - return bool(((self._parent._led_buffer[x // 16][led * 2] | \ - self._parent._led_buffer[x // 16][(led * 2) + 1] << 8) & mask) > 0) + return bool(((self._parent._led_buffer[x // 16][(led * 2) + 1] | \ + self._parent._led_buffer[x // 16][(led * 2) + 2] << 8) & mask) > 0) def __setitem__(self, x, value): if 0 < x >= self._parent._num_leds: @@ -91,11 +91,11 @@ def __setitem__(self, x, value): led = ledLUT[x % 16] >> 4 mask = 1 << (ledLUT[x % 16] & 0x0f) if value: - self._parent._led_buffer[x // 16][led * 2] |= mask - self._parent._led_buffer[x // 16][(led * 2) + 1] |= mask >> 8 + self._parent._led_buffer[x // 16][(led * 2) + 1] |= mask + self._parent._led_buffer[x // 16][(led * 2) + 2] |= mask >> 8 elif not value: - self._parent._led_buffer[x // 16][led * 2] &= ~mask - self._parent._led_buffer[x // 16][(led * 2) + 1] &= ~mask >> 8 + self._parent._led_buffer[x // 16][(led * 2) + 1] &= ~mask + self._parent._led_buffer[x // 16][(led * 2) + 2] &= ~mask >> 8 else: raise ValueError("LED value must be True or False") @@ -105,7 +105,7 @@ def __setitem__(self, x, value): def fill(self, on): fill = 0xff if on else 0x00 for buff in range(len(self._parent._i2c_devices)): - for i in range(16): + for i in range(1, 16): self._parent._led_buffer[buff][i] = fill if self._parent._auto_show: self._parent.show() @@ -196,10 +196,9 @@ def brightness(self, brightness): def show(self): """Refresh the LED buffer and show the changes.""" - temp_led_buffer = bytearray(self._num_leds + 1) pos = 0 for device in self._i2c_devices: - temp_led_buffer[1:] = self._led_buffer[pos] + temp_led_buffer = bytearray(self._led_buffer[pos]) with device: device.write(temp_led_buffer) pos += 1 @@ -224,7 +223,7 @@ def read_buttons(self): lists: 1 for new button presses, 1 for button relases. """ for i in range(len(self._buttons)): - self._buttons[i][0][:] = self._buttons[i][1][:] + self._buttons[i][0] = bytearray(self._buttons[i][1]) self._write_cmd(_HT16K33_KEY_READ_CMD) pos = 0 for device in self._i2c_devices: From 50d46b840fcf8212c13a9ae8f062c038054f4bf3 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Tue, 3 Apr 2018 21:04:19 -0500 Subject: [PATCH 2/5] fixed turn-off sequence; it was leaving led zero on --- examples/trellis_simpletest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/trellis_simpletest.py b/examples/trellis_simpletest.py index 16516bd..f565f48 100644 --- a/examples/trellis_simpletest.py +++ b/examples/trellis_simpletest.py @@ -39,7 +39,7 @@ # Turn off every LED, one at a time print('Turning off each LED, one at a time...') -for i in range(15,0,-1): +for i in range(15,-1,-1): trellis.led[i] = False time.sleep(.1) From bfe3264fd3008091edcfa86588364b5028298b8a Mon Sep 17 00:00:00 2001 From: sommersoft Date: Wed, 4 Apr 2018 10:14:10 -0500 Subject: [PATCH 3/5] adjusted _led_buffer to appropriate size --- adafruit_trellis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adafruit_trellis.py b/adafruit_trellis.py index 22f3077..f1b1fc4 100644 --- a/adafruit_trellis.py +++ b/adafruit_trellis.py @@ -136,7 +136,7 @@ def __init__(self, i2c, addresses=None): self._buttons = [] for i2c_address in addresses: self._i2c_devices.append(i2c_device.I2CDevice(i2c, i2c_address)) - self._led_buffer.append(bytearray(16)) + self._led_buffer.append(bytearray(17)) self._buttons.append([bytearray(6), bytearray(6)]) self._num_leds = len(self._i2c_devices) * 16 self._temp = bytearray(1) From 6a10d24a475b2ef789c0f627bac2886b3ca90bcd Mon Sep 17 00:00:00 2001 From: sommersoft Date: Wed, 4 Apr 2018 10:15:13 -0500 Subject: [PATCH 4/5] revert previous turn-off fix; was caused by _led_buffer size --- examples/trellis_simpletest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/trellis_simpletest.py b/examples/trellis_simpletest.py index f565f48..16516bd 100644 --- a/examples/trellis_simpletest.py +++ b/examples/trellis_simpletest.py @@ -39,7 +39,7 @@ # Turn off every LED, one at a time print('Turning off each LED, one at a time...') -for i in range(15,-1,-1): +for i in range(15,0,-1): trellis.led[i] = False time.sleep(.1) From 69d4b1744361477e410c238c9f003bffff130cf1 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Thu, 5 Apr 2018 16:50:31 -0500 Subject: [PATCH 5/5] range alignment --- adafruit_trellis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adafruit_trellis.py b/adafruit_trellis.py index f1b1fc4..d1350d7 100644 --- a/adafruit_trellis.py +++ b/adafruit_trellis.py @@ -105,7 +105,7 @@ def __setitem__(self, x, value): def fill(self, on): fill = 0xff if on else 0x00 for buff in range(len(self._parent._i2c_devices)): - for i in range(1, 16): + for i in range(1, 17): self._parent._led_buffer[buff][i] = fill if self._parent._auto_show: self._parent.show()