from time import sleep_ms
from machine import Pin
ledcols = [0, 1, 2, 3, 4 , 5, 6, 7]
swcols = [8, 9, 10, 11, 12, 13, 14, 15]
rows = [18, 19, 20, 21]
row_pins = [ Pin(pin_name, mode=Pin.OUT, value = 0) for pin_name in rows ]
ledcol_pins = [ Pin(pin_name, mode=Pin.OUT, value = 1) for pin_name in ledcols ]
swcol_pins = [ Pin(pin_name, mode=Pin.IN, pull=Pin.PULL_DOWN) for pin_name in swcols ]
last_keys = set()
while True:
current_keys = set()
for current_row in range(len(row_pins)):
for row_number, row in enumerate(row_pins):
if row_number == current_row:
row.high()
else:
row.low()
for ledcol_number, ledcol in enumerate(ledcol_pins):
for key in current_keys:
if key == (current_row, ledcol_number):
ledcol.low()
ledcol.high()
for swcol_number, swcol in enumerate(swcol_pins):
if swcol.value() == 1:
current_keys.add((current_row,swcol_number))
if current_keys != last_keys:
print("\nKeys changed")
print("New keys = ", current_keys - last_keys)
print("Released keys = ", last_keys - current_keys)
for key in current_keys:
keynum = key[0] * 8 + key[1]
keyspot = 1 << keynum
print("Current Key: {0} = 0b{1:b}".format(keynum, keyspot))
last_keys = current_keys