from machine import Pin
import utime

# Connect Keypad pins as below
col_list = [1, 2, 3, 4]
row_list = [5, 6, 7, 8]

# Set rows pin as output
for x in range(0, 4):
    row_list[x] = Pin(row_list[x], Pin.OUT)
    row_list[x].value(1)

# Set column as input
for x in range(0, 4):
    col_list[x] = Pin(col_list[x], Pin.IN, Pin.PULL_UP)

# Create a map between keypad buttons and chars
key_map = [
    ["D", "#", "0", "*"],
    ["C", "9", "8", "7"],
    ["B", "6", "5", "4"],
    ["A", "3", "2", "1"]
]

def Keypad4x4Read(cols, rows):
    for r in rows:
        r.value(0)

    result = [cols[0].value(), cols[1].value(), cols[2].value(), cols[3].value()]
    
    if min(result) == 0:
        key = key_map[int(rows.index(r))][int(result.index(0))]
        r.value(1)  # manages key kept pressed
        return key
    r.value(1)

# Start the main loop
print("--- Ready to get user inputs ---")
while True:
    key = Keypad4x4Read(col_list, row_list)
    if key is not None:
        print("Pressed button: " + key)
        utime.sleep(0.3)  # gives user enough time to release without having double inputs known as debounce
BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT