from machine import Pin, PWM
import utime
# --- Keypad setup ---
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 and buzzer setup ---
servo = PWM(Pin(19))
servo.freq(50)
buzzer = PWM(Pin(17))
buzzer.freq(1000)
# --- Functions ---
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
# --- Main Program ---
correct_password = "1234" # your 4-digit password
entered_password = ""
print("Enter 4-digit password:")
while True:
key = scan_keypad()
if key:
print("Key pressed:", key)
utime.sleep(0.3) # debounce
if key.isdigit(): # if it's 0-9
entered_password += key
print("*" * len(entered_password)) # hide password
if len(entered_password) == 4:
if entered_password == correct_password:
print("✅ Correct! Door Open")
set_servo_angle(0) # open door
sound_buzzer(0.2)
utime.sleep(3)
set_servo_angle(90) # close door again
else:
print("🚨 Wrong Password! Theft Alert!")
sound_buzzer(1)
entered_password = "" # reset for next try
print("Enter 4-digit password:")
if key == '*': # Clear entry
entered_password = ""
print("Cleared. Enter again.")