Mercurial > micropython-is31fl3728
changeset 1:ce55d0a85b30 draft
Add row/col mapping, fix brightness, add flags
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Thu, 20 Apr 2017 01:43:31 +0200 |
| parents | 64db339f6067 |
| children | ac35bd1c3a8c |
| files | is31fl3728.py |
| diffstat | 1 files changed, 46 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/is31fl3728.py Wed Apr 19 13:04:47 2017 +0200 +++ b/is31fl3728.py Thu Apr 20 01:43:31 2017 +0200 @@ -1,6 +1,6 @@ class Matrix8x8: - ROWS = (0, 1, 2, 3, 4, 5, 6, 7) - COLS = (0, 1, 2, 3, 4, 5, 6, 7) + ROWS = (7, 6, 1, 2, 0, 3, 4, 5) + COLS = (0, 4, 1, 5, 7, 2, 6, 3) def __init__(self, i2c, address=0x60): self.i2c = i2c @@ -17,10 +17,12 @@ for y in range(8): self.buffer[y] = color - def pixel(self, x, y, color=1): + def pixel(self, x, y, color=None): if not (0 <= x <= 7 and 0 <= y <= 7): return - if color: + if color is None: + return bool(self.buffer[ROWS[y]] & (0x01 << COLS[x])) + elif color: self.buffer[ROWS[y]] |= 0x01 << COLS[x] else: self.buffer[ROWS[y]] &= ~(0x01 << COLS[x]) @@ -31,9 +33,46 @@ self._register(0x0c, 0xff) def brightness(self, value): - if (0 <= value <= 6): - self._register(0x0d, 0x1000 | value) + register = self._register(0x0d) + if value is None: + value = register & 0x0f + if value & 0b1000: + value &= 0b0111 + else: + value += 7 + return value + elif (0 <= value <= 6): + register = register & ~0x0f | (0b1000 | value) & 0x0f elif (7 <= value <= 14): - self._register(0x0f, value - 7) + register = register & ~0x0f | (value - 7) & 0x0f else: raise ValueError("out of range") + self._register(0x0d, register) + + def _flag(self, register, mask, value=None): + flag = self._register(register) + if value is None: + return bool(flag & mask) + elif value: + flag |= mask + else: + flag &= ~mask + self._register(register, flag) + + def active(self, value=None): + return self._flag(0x00, 0x80, value) + + def equalizer_enabled(self, value=None): + return self._flag(0x0f, 0x40, value) + + def audio_enabled(self, value=None): + return self._flag(0x00, 0x04, value) + + def audio_gain(self, value=None): + register = self._register(0x0d) + if value is None: + return (register & 0x70) >> 4 + elif not (0 <= value <= 7): + raise ValueError("out of range") + register = register & ~0x70 | (value << 4) & 0x70 + self._register(0x0d, register)
