from machine import Pin, Timer, PWM
from time import sleep, sleep_ms
from esp32_gpio_lcd import GpioLcd
from math import floor
import utime
servomotor=PWM(Pin(32), freq=50, duty=0)
teclas = [['1', '2', '3', 'A'], ['4', '5', '6', 'B'], ['7', '8', '9', 'C'], ['*', '0', '#', 'D']]
# Defininicón de Pines
filas = [2,4,5,19]
columnas = [12,27,26,25]
#aste=["*"]
pines_Filas = [Pin(pin_nombre, mode=Pin.OUT) for pin_nombre in filas]
pines_Columnas = [Pin(pin_nombre, mode=Pin.IN, pull=Pin.PULL_DOWN) for pin_nombre in columnas]
#Funciónpara inicializar el teclado
def inicio_teclado():
for fila in range(0,4):
pines_Filas[fila].value(0)
def inicio_LCD():
"""Test function for verifying basic functionality."""
global lcd
lcd = GpioLcd(rs_pin=Pin(18),
enable_pin=Pin(15),
d4_pin=Pin(23),
d5_pin=Pin(22),
d6_pin=Pin(21),
d7_pin=Pin(14),
num_lines=2, num_columns=16)
lcd.putstr("PROBANDO")
sleep_ms(1000)
lcd.clear()
lcd.putstr("INGRESE PIN:")
def escanear_teclado(fila, columna):
""" Escaneo del teclado """
# poner todas las filas en alto
pines_Filas[fila].value(1)
key = None
# verificación al presionar una tecla o evento
if (pines_Columnas[columna].value()==0):
key = 0
if (pines_Columnas[columna].value() == 1):
key = 1
pines_Filas[fila].value(0)
# retorne el estado de la tecla
return key
#Definir contraseña
password=("24683")
passwordin =""
Nueva_lista =""
# poner todas las columnas en bajo
inicio_teclado()
inicio_LCD()
Contador = 0
ejecutar = False
while True:
for fila in range(4):
for columna in range(4):
tecla = escanear_teclado(fila, columna)
if tecla == 1: #leer cualquier tecla
if (teclas[fila][columna]) not in ['#','A', 'D']: #evitar que genere *
lcd.putstr("*") #generacion de *
elif (teclas[fila][columna]) not in ['1', '2', '3', 'A','4', '5', '6', 'B','7', '8', '9', 'C','*', '0','D' ]: #hacer que solo cuando se oprima # se borro el lcd
lcd.clear()
passwordin = ""
ultima_tecla = teclas[fila][columna]
if ultima_tecla not in ['#','A', 'D']: #evitar que # y d se guarden en passwordin
passwordin = passwordin + ultima_tecla
Nueva_lista = Nueva_lista + ultima_tecla
if len(passwordin)==1: # cuando la longitud se passwordin sea 1 se borre la pantalla
lcd.clear()
lcd.putstr("*")
if len (passwordin)>=1 and teclas[fila][columna] =='D':
Contador = 0 # configuracion de D como enter
lcd.clear()
if passwordin == password:
#comparacion de las listas
lcd.move_to(6,0)
lcd.putstr("PIN")
lcd.move_to(3,1)
lcd.putstr("CORRECTO")
ejecutar = True
contador = 7
for i in range (1500,floor(180*10.55)+500, 15):#hacer que el servomotor se mueva de 90 grdos a 180 grados
servomotor.duty_ns(int(i*1000))
sleep_ms(100)
Contador =7
else:
lcd.move_to(6,0)
lcd.putstr("PIN")
lcd.move_to(3,1)
lcd.putstr("INCORRECTO")
sleep(2)
lcd.clear()
lcd.putstr("INGRESE PIN:")
passwordin = ""
ultima_tecla = ""
if ultima_tecla == 'D'and not ejecutar:
Contador = 0
while Contador <5:
sleep(1)
Contador +=1
if Contador ==3:
lcd.clear()
lcd.putstr ("CAMBIO DE PIN")
sleep(2)
lcd.clear()
lcd.move_to(3,0)
lcd.putstr("INGRESE PIN")
lcd.move_to(6,1)
lcd.putstr("ACTUAL")
ejecutar = True
if len(passwordin)== len(password) and Contador ==5:
if password == passwordin:
lcd.clear()
lcd.move_to(1,0)
lcd.putstr("INGRESE NUEVO ")
lcd.move_to(1,1)
lcd.putstr("PIN: ")
Nueva_lista = ""
Contador = 6
else:
lcd.clear()
lcd.move_to(6,0)
lcd.putstr("CAMBIO")
lcd.move_to(6,1)
lcd.putstr("FALLIDO")
sleep(2)
lcd.clear()
lcd.putstr("INGRESE PIN: ")
passwordin =""
ejecutar = False
if ultima_tecla == 'A' and Contador == 6:
lcd.clear()
lcd.putstr("CAMBIO EXITOSO")
sleep (2)
lcd.clear()
lcd.putstr("INGRESE PIN: ")
password = Nueva_lista
passwordin= ""
Contador = 0
ejecutar = False
if ultima_tecla == '#' and Contador ==7: # Restablecer solo cuando la contraseña es correcta y se pulsa #
lcd.putstr("RESTABLECIENDO")
ejecutar = False
for j in range(floor(180*10.55)+500,1500, -15):#hacer que el servomotor se mueva de 180 a 90 grados.
servomotor.duty_ns(j*1000)
sleep_ms(100)
Contador = 0
sleep(1.5)
lcd.clear()
passwordin = "" # se vacia passwordin
lcd.putstr("INGRESE PIN:") #se reinicia programacion
sleep(0.5)
print("su pin es "+ password)
#print(ejecutar)