from machine import Pin, PWM
import utime
rows = [Pin(i, Pin.OUT) for i in (0, 1, 2, 3)]
cols = [Pin(i, Pin.IN, Pin.PULL_DOWN) for i in (4, 5, 6, 7)]
keys = [
['1', '2', '3', 'A'],
['4', '5', '6', 'B'],
['7', '8', '9', 'C'],
['*', '0', '#', 'D']
]
servo = PWM(Pin(19))
servo.freq(50)
buzzer = PWM(Pin(17))
buzzer.freq(1000)
def set_servo_angle(angle):
duty = int((angle / 180) * 5000 + 2500)
servo.duty_u16(duty)
def sound_buzzer(duration=0.5):
buzzer.duty_u16(30000)
utime.sleep(duration)
buzzer.duty_u16(0)
def scan_keypad():
for row_num, row in enumerate(rows):
for r in rows:
r.value(0)
row.value(1)
for col_num, col in enumerate(cols):
if col.value():
return keys[row_num][col_num]
return None
correct_password = "16020"
entered_password = ""
print("Enter 5-digit password:")
while True:
key = scan_keypad()
if key:
print("Key pressed:", key)
utime.sleep(0.3)
if key.isdigit():
entered_password += key
print("*" * len(entered_password))
if len(entered_password) == 5:
if entered_password == correct_password:
print("correct! Door Open")
set_servo_angle(0)
sound_buzzer(0.2)
utime.sleep(3)
set_servo_angle(90)
else:
print(" Wrong Password! Theft Alert!")
sound_buzzer(1)
entered_password = ""
print("Enter 4-digit password:")
if key == '*':
entered_password = ""
print("Cleared. Enter again.")