From bf7bcb83f3ba873314f2725c91d0d6e0166fe8ab Mon Sep 17 00:00:00 2001 From: "E. A. Graham Jr" <10370165+EAGrahamJr@users.noreply.github.com> Date: Sat, 17 Jun 2023 11:40:23 -0700 Subject: [PATCH 1/3] Read all 4 buttons with one call. Fixes #10 - uses the same `digital_read_bulk` Seesaw method, but returns all of the button states as list. This improves read performance since each individual button does not need to be read. --- adafruit_neokey/neokey1x4.py | 13 +++++++++ examples/neokey1x4_allkeys.py | 51 +++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 examples/neokey1x4_allkeys.py diff --git a/adafruit_neokey/neokey1x4.py b/adafruit_neokey/neokey1x4.py index 2405bcb..3251e8e 100644 --- a/adafruit_neokey/neokey1x4.py +++ b/adafruit_neokey/neokey1x4.py @@ -71,3 +71,16 @@ def __getitem__(self, index: int) -> bool: if not isinstance(index, int) or (index < 0) or (index > 3): raise RuntimeError("Index must be 0 thru 3") return not self.digital_read(index + 4) + + def get_keys(self) -> typing.List[bool]: + """Read all 4 keys at once and return an array of booleans. + + Returns: + typing.List[bool]: _description_ + """ + # use a bit mask with ports 4-7 to read all 4 keys at once + bulk_read = self.digital_read_bulk(0xF0) + + # convert the leftmost 4 bits to an array of booleans and return + keys = [bulk_read & (1 << i) == 0 for i in range(4, 8)] + return keys diff --git a/examples/neokey1x4_allkeys.py b/examples/neokey1x4_allkeys.py new file mode 100644 index 0000000..c374f1e --- /dev/null +++ b/examples/neokey1x4_allkeys.py @@ -0,0 +1,51 @@ +# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries +# SPDX-License-Identifier: MIT +"""NeoKey simpletest.""" +import board +from adafruit_neokey.neokey1x4 import NeoKey1x4 +from time import sleep + +# use default I2C bus +i2c_bus = board.I2C() + +# Create a NeoKey object +neokey = NeoKey1x4(i2c_bus, addr=0x30) + +print("Adafruit NeoKey simple test reading all keys") + +# neokey.edbug = True + +while True: + keys = neokey.get_keys() + print(f"keys {keys}") + # test for all buttons pressed at once + if keys[0] and keys[1] and keys[2] and keys[3]: + for i in range(4): + neokey.pixels[i] = 0xFF00FF + # check each key individually + else: + if keys[0]: + print("Button A") + neokey.pixels[0] = 0xFF0000 + else: + neokey.pixels[0] = 0x0 + + if keys[1]: + print("Button B") + neokey.pixels[1] = 0xFFFF00 + else: + neokey.pixels[1] = 0x0 + + if keys[2]: + print("Button C") + neokey.pixels[2] = 0x00FF00 + else: + neokey.pixels[2] = 0x0 + + if keys[3]: + print("Button D") + neokey.pixels[3] = 0x00FFFF + else: + neokey.pixels[3] = 0x0 + + sleep(2) From 6d623921fa3a87b2b5e1cba05ab9c384b1064f29 Mon Sep 17 00:00:00 2001 From: "E. A. Graham Jr" <10370165+EAGrahamJr@users.noreply.github.com> Date: Sat, 17 Jun 2023 11:48:52 -0700 Subject: [PATCH 2/3] pylint fix --- examples/neokey1x4_allkeys.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/neokey1x4_allkeys.py b/examples/neokey1x4_allkeys.py index c374f1e..f9ba06a 100644 --- a/examples/neokey1x4_allkeys.py +++ b/examples/neokey1x4_allkeys.py @@ -1,9 +1,9 @@ # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries # SPDX-License-Identifier: MIT """NeoKey simpletest.""" +from time import sleep import board from adafruit_neokey.neokey1x4 import NeoKey1x4 -from time import sleep # use default I2C bus i2c_bus = board.I2C() @@ -48,4 +48,4 @@ else: neokey.pixels[3] = 0x0 - sleep(2) + sleep(.5) From 8d5ecc9af008a35614d4bd966b761ba9c324c46a Mon Sep 17 00:00:00 2001 From: "E. A. Graham Jr" <10370165+EAGrahamJr@users.noreply.github.com> Date: Sat, 17 Jun 2023 11:52:55 -0700 Subject: [PATCH 3/3] black fix --- examples/neokey1x4_allkeys.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/neokey1x4_allkeys.py b/examples/neokey1x4_allkeys.py index f9ba06a..4dc1115 100644 --- a/examples/neokey1x4_allkeys.py +++ b/examples/neokey1x4_allkeys.py @@ -48,4 +48,4 @@ else: neokey.pixels[3] = 0x0 - sleep(.5) + sleep(0.5)