import board, time, digitalio
# массив пинов r1, r2, r3, r4 (строки клавиатуры)
rows = [digitalio.DigitalInOut(row) for row in [board.IO13, board.IO10, board.IO8, board.IO6]]
# массив пинов c1, c2, c3 (столбцы клавиатуры)
cols = [digitalio.DigitalInOut(col) for col in [board.IO4, board.IO2, board.IO1]]
# кнопки клавиатуры, функция scan будет возвращать их при нажатии
symbols = ["123", "456", "789", "*0#"]
# инициализируем пины r1..r4 на выход, по умолчанию у всех значение 1
for row in rows:
row.direction = digitalio.Direction.OUTPUT
row.value = True
# инициализируем пины c1..c3 на вход
for col in cols:
col.direction = digitalio.Direction.INPUT
col.pull = digitalio.Pull.UP
# функция сканирования клавиатуры
# возвращает строку с нажатыми символами (например "12#", "5" или "")
def scan_keyboard():
pressed = ""
for row, row_keys in zip(rows, symbols):
# каждую строку поочерёдно устанавливаем в 0
row.value = False
for col, key in zip(cols, row_keys):
# если в колонке тоже стал 0, значит кнопка
# на пересечении строки и столбца нажата
if not col.value:
pressed += key
row.value = True
return pressed
while True:
print(scan_keyboard())
time.sleep(0.1)