############################
# E079_TECLADO.PY: Teclado matricial 4x4
# ENTRADAS: Tecla pulsada
# SALIDAS: Tecla visualizada
############################
from machine import Pin # Gestión GPIO
from time import sleep # Control tiempo
# GPIO filas, columnas y parámetros
filas = [Pin(pin) for pin in (22, 21, 19, 18)]
columnas = [Pin(pin) for pin in (5, 17, 16, 4)]
bounce = .01 # Control de rebotes
# Configura filas como entrada con pull-up interno
for fila in filas:
fila.init(mode=Pin.IN, pull=Pin.PULL_UP)
# Configura filas como salidas con pull-up interno
for columna in columnas:
columna.init(mode=Pin.OUT, pull=Pin.PULL_UP)
# Define las teclas del teclado matriz
teclas = [
['1', '2', '3', 'A'],
['4', '5', '6', 'B'],
['7', '8', '9', 'C'],
['*', '0', '#', 'D']]
# Escanea teclado por polling
def escanear_teclado():
for i, columna in enumerate(columnas):
columna.value(0) # Establece columna actual en bajo
for j, fila in enumerate(filas):
if not fila.value(): # Verifica si la fila actual está activada
sleep(bounce) # Evita rebotes
if not fila.value():# Vuelve a comprobarlo
return teclas[j][i]
columna.value(1) # Establece columna actual en alto
return None
# Bucle principal
print('TECLADO MATRICIAL 4X4')
print('Pulsa una tecla...')
try:
while True:
tecla_presionada = escanear_teclado()
if tecla_presionada:
print("Tecla presionada:", tecla_presionada)
sleep(.2) # Espera entre pulsaciones
except KeyboardInterrupt:
print('Detenido...')