from machine import Pin, PWM
from time import sleep, sleep_ms
from lcd import LCD
from servo import Servo
teclas= [['1', '2', '3', 'A'],
['4', '5', '6', 'B'],
['7', '8', '9', 'C'],
['*', '0', '#', 'D']]
linhas= [Pin(pinos, Pin.OUT) for pinos in (18,19,20,21)]
colunas= [Pin(pinos, Pin.IN, Pin.PULL_DOWN) for pinos in (22,26,27,28)]
lcd= LCD(rs=0, en=1, d4=2, d5=3, d6=4, d7=5)
senha= ['A','1','2','D']
senha_digitada= []
motor= Servo(6)
posicao= 0
Buzzer= PWM(7)
lcd.message("Por favor digite")
lcd.set_cursor(1, 0)
lcd.message("a senha:")
def teclado():
for i in range(4):
for linha in linhas:
linha.value(0)
linhas[i].value(1)
for x in range(4):
if colunas[x].value() == 1:
while colunas[x].value() == 1:
sleep(0.01)
return teclas[i][x]
return None
def ver_tecla():
global posicao, senha_digitada
tecla = teclado()
if tecla:
print(f"A tecla pressionada foi: {tecla}")
if posicao < 4: # Limita a escrita em 4 posições (8 até 11)
lcd.set_cursor(1, 8 + posicao)
lcd.message("*")
senha_digitada.append(tecla)
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 '*'
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!")
motor.move(180)
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()