-
Notifications
You must be signed in to change notification settings - Fork 0
/
tecladomatricial.py
56 lines (40 loc) · 1.43 KB
/
tecladomatricial.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
from machine import Pin
from time import sleep
TECLA_ARRIBA = const(0)
TECLA_ABAJO = const(1)
teclas = [['1', '2', '3', 'A'], ['4', '5', '6', 'B'], ['7', '8', '9', 'C'], ['*', '0', '#', 'D']]
# Pines del GPIO
filas = [2,3,4,5]
columnas = [6,7,8,9]
# define los pines de filas como salidas
fila_pines = [Pin(nombre_pin, mode=Pin.OUT) for nombre_pin in filas]
# define los pines de columnas como entradas
columna_pines = [Pin(nombre_pin, mode=Pin.IN, pull=Pin.PULL_DOWN) for nombre_pin in columnas]
def init():
for fila in range(0,4):
for columna in range(0,4):
fila_pines[fila].low()
def scan(fila, columna):
""" escanea todo el teclado """
# define la columna actual en alto -high-
fila_pines[fila].high()
tecla = None
# verifica por teclas si hay teclas presionadas
if columna_pines[columna].value() == TECLA_ABAJO:
tecla = TECLA_ABAJO
if columna_pines[columna].value() == TECLA_ARRIBA:
tecla = TECLA_ARRIBA
fila_pines[fila].low()
# devuelve el estado de la tecla
return tecla
print("Listo en espera")
# define todas las columnas bajo -low-
init()
while True:
for fila in range(4):
for columna in range(4):
tecla = scan(fila, columna)
if tecla == TECLA_ABAJO:
print("Tecla Presionada", teclas[fila][columna])
sleep(0.5)
ultima_tecla_presionada = teclas[fila][columna]