from machine import Pin
import utime
from gpio_lcd import GpioLcd
# Crear un mapa entre los botones del teclado y los caracteres
matrix_keys = [['1', '2', '3', 'A'],
['4', '5', '6', 'B'],
['7', '8', '9', 'C'],
['*', '0', '#', 'D']]
# PINs de acuerdo al esquemático - Cambiar los pines de acuerdo a sus conexiones
keypad_rows = [9, 8, 7, 6]
keypad_columns = [5, 4, 3, 2]
# Crear dos listas vacías para preparar los pines (Filas de salida y columnas de entradas)
col_pins = []
row_pins = []
# Loop para asignar los pines GPIO y setear las entradas y salidas
for x in range(0, 4):
row_pins.append(Pin(keypad_rows[x], Pin.OUT))
row_pins[x].value(1)
col_pins.append(Pin(keypad_columns[x], Pin.IN, Pin.PULL_DOWN))
col_pins[x].value(0)
# Inicializar el LED
led = Pin(13,mode=Pin.OUT, value=False)
ledcorrect = Pin(10,mode=Pin.OUT, value=False)
ledincorrect = Pin(28,mode=Pin.OUT, value=False)
# Inicializar el LCD
lcd = GpioLcd(rs_pin=Pin(16),
enable_pin=Pin(17),
d4_pin=Pin(18),
d5_pin=Pin(19),
d6_pin=Pin(20),
d7_pin=Pin(21),
num_lines=2, num_columns=16)
# Contraseña preestablecida
correct_password = "246810"
capturar_tecla = ""
def scankeys():
global capturar_tecla
for row in range(4):
for col in range(4):
row_pins[row].high()
key = None
if col_pins[col].value() == 1:
key_press = matrix_keys[row][col]
print("You have pressed:", key_press)
# Agregar el carácter presionado
capturar_tecla += key_press
lcd.clear()
lcd.move_to(0, 0)
lcd.putstr(capturar_tecla)
#verificar
if len(capturar_tecla) == 5:
if capturar_tecla == correct_password:
lcd.clear()
lcd.move_to(0, 0)
lcd.putstr("Correcto ")
ledcorrect.value(1)
utime.sleep(2)
ledcorrect.value(0)
else:
lcd.clear()
lcd.move_to(0, 0)
lcd.putstr("Incorrecto ")
ledincorrect.value(1)
utime.sleep(2)
ledincorrect.value(0)
# Limpiar variable
capturar_tecla = ""
lcd.clear()
led.toggle()
utime.sleep(0.2)
row_pins[row].low()
# Bucle principal para escanear las teclas
while True:
scankeys()
utime.sleep(0.1)