expose keypad options through scanner init
This commit is contained in:
parent
ec8e167996
commit
b3ec37e274
@ -45,19 +45,19 @@ from kmk.scanners.keypad import KeysScanner
|
||||
# fmt: off
|
||||
def raspi_pins():
|
||||
return [
|
||||
[board.D20, board.D16, board.D26],
|
||||
[board.D6, board.D12, board.D13],
|
||||
[board.D22, board.D24, board.D5],
|
||||
[board.D17, board.D27, board.D23],
|
||||
board.D20, board.D16, board.D26,
|
||||
board.D6, board.D12, board.D13,
|
||||
board.D22, board.D24, board.D5,
|
||||
board.D17, board.D27, board.D23,
|
||||
]
|
||||
|
||||
|
||||
def itsybitsy_pins():
|
||||
return [
|
||||
[board.D11, board.D12, board.D2],
|
||||
[board.D10, board.D9, board.D7],
|
||||
[board.A5, board.A4, board.A3],
|
||||
[board.A2, board.A1, board.A0],
|
||||
board.D11, board.D12, board.D2,
|
||||
board.D10, board.D9, board.D7,
|
||||
board.A5, board.A4, board.A3,
|
||||
board.A2, board.A1, board.A0,
|
||||
]
|
||||
# fmt: on
|
||||
|
||||
|
@ -28,11 +28,11 @@ from kmk.scanners.keypad import KeysScanner
|
||||
|
||||
# fmt: off
|
||||
_KEY_CFG = [
|
||||
[board.SW3, board.SW7, board.SW11, board.SW15],
|
||||
[board.SW2, board.SW6, board.SW10, board.SW14],
|
||||
[board.SW1, board.SW5, board.SW9, board.SW13],
|
||||
[board.SW0, board.SW4, board.SW8, board.SW12],
|
||||
[board.USER_SW],
|
||||
board.SW3, board.SW7, board.SW11, board.SW15,
|
||||
board.SW2, board.SW6, board.SW10, board.SW14,
|
||||
board.SW1, board.SW5, board.SW9, board.SW13,
|
||||
board.SW0, board.SW4, board.SW8, board.SW12,
|
||||
board.USER_SW,
|
||||
]
|
||||
# fmt: on
|
||||
|
||||
|
@ -9,6 +9,10 @@ need to swap it out with an alternative scanner.
|
||||
|
||||
|
||||
## Keypad Scanners
|
||||
The scanners in `kmk.scanners.keypad` wrap the `keypad` module that ships with
|
||||
CircuitPython and support the some configuration and tuning options as their
|
||||
upstream. You can find out more in the (CircuitPython
|
||||
documentation)[https://docs.circuitpython.org/en/latest/shared-bindings/keypad/index.html].
|
||||
|
||||
### keypad MatrixScanner
|
||||
This is the default scanner used by KMK.
|
||||
@ -21,9 +25,13 @@ class MyKeyboard(KMKKeyboard):
|
||||
def __init__(self):
|
||||
# create and register the scanner
|
||||
self.matrix = MatrixScanner(
|
||||
# required arguments:
|
||||
cols=self.col_pins,
|
||||
rows=self.row_pins,
|
||||
diode_orientation=self.diode_orientation,
|
||||
# optional arguments with defaults:
|
||||
columns_to_anodes=DiodeOrientation.COL2ROW,
|
||||
interval=0.02,
|
||||
max_events=64
|
||||
)
|
||||
|
||||
```
|
||||
@ -43,10 +51,10 @@ from kmk.scanners.keypad import KeysScanner
|
||||
|
||||
# GPIO to key mapping - each line is a new row.
|
||||
_KEY_CFG = [
|
||||
[board.SW3, board.SW7, board.SW11, board.SW15],
|
||||
[board.SW2, board.SW6, board.SW10, board.SW14],
|
||||
[board.SW1, board.SW5, board.SW9, board.SW13],
|
||||
[board.SW0, board.SW4, board.SW8, board.SW12],
|
||||
board.SW3, board.SW7, board.SW11, board.SW15,
|
||||
board.SW2, board.SW6, board.SW10, board.SW14,
|
||||
board.SW1, board.SW5, board.SW9, board.SW13,
|
||||
board.SW0, board.SW4, board.SW8, board.SW12,
|
||||
]
|
||||
|
||||
|
||||
@ -54,7 +62,15 @@ _KEY_CFG = [
|
||||
class MyKeyboard(KMKKeyboard):
|
||||
def __init__(self):
|
||||
# create and register the scanner
|
||||
self.matrix = MatrixScanner(pins=_KEY_CFG)
|
||||
self.matrix = MatrixScanner(
|
||||
# require argument:
|
||||
pins=_KEY_CFG,
|
||||
# optional arguments with defaults:
|
||||
value_when_pressed=False,
|
||||
pull=True,
|
||||
interval=0.02,
|
||||
max_events=64
|
||||
)
|
||||
```
|
||||
|
||||
|
||||
|
@ -305,9 +305,9 @@ class KMKKeyboard:
|
||||
if self.debug_enabled:
|
||||
print('Initialising default matrix scanner.')
|
||||
self.matrix = MatrixScanner(
|
||||
col_pins=self.col_pins,
|
||||
column_pins=self.col_pins,
|
||||
row_pins=self.row_pins,
|
||||
direction=self.diode_orientation,
|
||||
columns_to_anodes=self.diode_orientation,
|
||||
)
|
||||
else:
|
||||
if self.debug_enabled:
|
||||
|
@ -11,13 +11,10 @@ class KeypadScanner(Scanner):
|
||||
:param kp: An instance of the keypad class.
|
||||
'''
|
||||
|
||||
def __init__(self, pin_map, kp):
|
||||
self.pin_map = pin_map
|
||||
self.keypad = kp
|
||||
def __init__(self):
|
||||
# for split keyboards, the offset value will be assigned in Split module
|
||||
self.offset = 0
|
||||
self.coord_mapping = tuple(range(self.key_count))
|
||||
|
||||
self.curr_event = keypad.Event()
|
||||
|
||||
@property
|
||||
@ -39,7 +36,7 @@ class KeypadScanner(Scanner):
|
||||
return ev
|
||||
|
||||
|
||||
def MatrixScanner(row_pins, col_pins, direction=DiodeOrientation.COLUMNS):
|
||||
class MatrixScanner(KeypadScanner):
|
||||
'''
|
||||
Row/Column matrix using the CircuitPython 7 keypad scanner.
|
||||
|
||||
@ -47,23 +44,47 @@ def MatrixScanner(row_pins, col_pins, direction=DiodeOrientation.COLUMNS):
|
||||
:param col_pins: A sequence of pins used for columns.
|
||||
:param direction: The diode orientation of the matrix.
|
||||
'''
|
||||
pin_map = [
|
||||
(row, col) for row in range(len(row_pins)) for col in range(len(col_pins))
|
||||
]
|
||||
kp = keypad.KeyMatrix(
|
||||
row_pins, col_pins, columns_to_anodes=(direction == DiodeOrientation.COLUMNS)
|
||||
)
|
||||
return KeypadScanner(pin_map, kp)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
row_pins,
|
||||
column_pins,
|
||||
*,
|
||||
columns_to_anodes=DiodeOrientation.COL2ROW,
|
||||
interval=0.02,
|
||||
max_events=64,
|
||||
):
|
||||
self.keypad = keypad.KeyMatrix(
|
||||
row_pins,
|
||||
column_pins,
|
||||
columns_to_anodes=(columns_to_anodes == DiodeOrientation.COL2ROW),
|
||||
interval=interval,
|
||||
max_events=max_events,
|
||||
)
|
||||
super().__init__()
|
||||
|
||||
|
||||
def KeysScanner(pins):
|
||||
class KeysScanner(KeypadScanner):
|
||||
'''
|
||||
GPIO-per-key 'matrix' using the native CircuitPython 7 keypad scanner.
|
||||
|
||||
:param pins: An array of arrays of CircuitPython Pin objects, such that pins[r][c] is the pin for row r, column c.
|
||||
'''
|
||||
pin_map = [(row, col) for row in range(len(pins)) for col in range(len(pins[row]))]
|
||||
kp = keypad.Keys(
|
||||
[pins[r][c] for (r, c) in pin_map], value_when_pressed=False, pull=True
|
||||
)
|
||||
return KeypadScanner(pin_map, kp)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
pins,
|
||||
*,
|
||||
value_when_pressed=False,
|
||||
pull=True,
|
||||
interval=0.02,
|
||||
max_events=64,
|
||||
):
|
||||
self.keypad = keypad.Keys(
|
||||
pins,
|
||||
value_when_pressed=value_when_pressed,
|
||||
pull=pull,
|
||||
interval=interval,
|
||||
max_events=max_events,
|
||||
)
|
||||
super().__init__()
|
||||
|
Loading…
Reference in New Issue
Block a user