41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
import board
|
|
import busio
|
|
import digitalio
|
|
from adafruit_mcp230xx.mcp23017 import MCP23017
|
|
|
|
class KeyInterface:
|
|
_MCP23017_OLATA = 0x14
|
|
_MCP23017_OLATB = 0x15
|
|
|
|
def set_olata(self, val: int):
|
|
self.mcp._write_u8(self._MCP23017_OLATA, val)
|
|
|
|
def set_olatb(self, val: int):
|
|
self.mcp._write_u8(self._MCP23017_OLATB, val)
|
|
|
|
def __init__(self, i2c):
|
|
self._i2c = i2c
|
|
|
|
# Turn on MCP
|
|
self._mcp_reset_pin = digitalio.DigitalInOut(board.D4)
|
|
self._mcp_reset_pin.direction = digitalio.Direction.OUTPUT
|
|
self._mcp_reset_pin.value = True
|
|
|
|
# Initialize MCP
|
|
self.mcp = MCP23017(self._i2c)
|
|
|
|
# Set up MCP pins
|
|
self.mcp.iodirb = 255 # GPIO B (rows) all input
|
|
self.mcp.ipolb = 255 # GPIO B inverted polarity
|
|
self.mcp.gppub = 255 # GPIO B all pulled up
|
|
self.set_olata(0) # GPIO A all output low
|
|
|
|
def scan(self):
|
|
result = []
|
|
for i in range(0, 6):
|
|
self.mcp.iodira = 0xFF ^ (0x01 << i)
|
|
result.append(self.mcp.gpiob)
|
|
self.mcp.iodira = 0xFF
|
|
return result
|
|
|