from machine import Pin, PWM
from time import sleep, sleep_ms
from lcd import LCD
from keypad import Keypad
teclas= [['1', '2', '3', 'A'],
['4', '5', '6', 'B'],
['7', '8', '9', 'C'],
['*', '0', '#', 'D']]
linhas= [Pin(18),Pin(19),Pin(20),Pin(21)]
colunas= [Pin(22), Pin(26), Pin(27), Pin(28)]
teclado= Keypad(linhas, colunas, teclas)
# ,26,27,28
lcd= LCD(rs=0, en=1, d4=2, d5=3, d6=4, d7=5)
senha= ['A','1','2','D']
senha_digitada= []
rele= Pin(6, Pin.OUT)
posicao= 0
Buzzer= PWM(7)
lcd.message("Por favor digite")
lcd.set_cursor(1, 0)
lcd.message("a senha:")
def ver_tecla():
global posicao, senha_digitada
if teclado.read_keypad():
print(f"A tecla pressionada foi: {teclado.read_keypad()}")
if posicao < 4: # Limita a escrita em 4 posições (8 até 11)
lcd.set_cursor(1, 8 + posicao)
lcd.message("*")
senha_digitada.append(teclado.read_keypad())
posicao += 1
if len(senha_digitada) == len(senha):
Indentificar_senha()
# limpa para nova tentativa
posicao = 0
senha_digitada = []
lcd.set_cursor(1, 8)
lcd.message(" ") # Apaga os '*'
while teclado.read_keypad() is not None:
sleep_ms(50)
def campainha_certo():
Buzzer.freq(1000)
Buzzer.duty_u16(30000)
sleep(0.1)
Buzzer.duty_u16(0)
sleep(0.1)
Buzzer.duty_u16(30000)
sleep(0.1)
Buzzer.duty_u16(0)
def campainha_errado():
Buzzer.freq(300)
Buzzer.duty_u16(30000)
sleep(0.5)
Buzzer.duty_u16(0)
def Indentificar_senha():
print(f"As teclas digitadas foram:{senha_digitada}")
if senha_digitada == senha:
print("Senha correta!")
lcd.clear()
lcd.message("Senha correta!")
rele.on()
campainha_certo()
else:
print("Senha incorreta!")
lcd.clear()
lcd.message("Senha incorreta!")
senha_digitada.clear()
campainha_errado()
sleep(5)
lcd.clear()
lcd.message("Por favor digite")
lcd.set_cursor(1, 0)
lcd.message("a senha:")
while True:
ver_tecla()