from machine import Pin, I2C, PWM, ADC, Timer
from pico_i2c_lcd import I2cLcd
from time import sleep
def keypad():
global rows, cols, pwd, entry
keys=[
["1", "2", "3", "A"],
["4", "5", "6", "B"],
["7", "8", "9", "C"],
["*", "0", "#", "D"]
]
for i in range(0,4):
rows[i].high()
for j in range(0,4):
if cols[j].value():
print("key",keys[i][j])
entry+=(keys[i][j])
print(entry)
if entry==pwd:
return
rows[i].low()
i2c=I2C(0, sda=Pin(16), scl=Pin(17), freq=400000)
lcd=I2cLcd(i2c, i2c.scan()[0], 2, 16)
rowPins=[0,1,2,3]
colPins=[4,5,6,7]
rows,cols=[],[]
for i in range(0,4):
rows.append(Pin(rowPins[i], Pin.OUT))
cols.append(Pin(colPins[i], Pin.OUT))
pwd="1234"
entry=""
lcd.putstr("Door is locked")
print(pwd)
while pwd != entry:
keypad()
sleep(0.1)
lcd.clear()
lcd.putstr("Lock Open")
servo=PWM(Pin(20))
servo.freq(50)
pot=ADC(Pin(28))
while True:
raw=pot.read_u16()
duty= int((1.5+(raw/65535)*(2.4-1.5))*65535/20.0)
# print(duty)
servo.duty_u16(duty)
if duty==7864:
lcd.clear()
lcd.putstr("Door open")
break
sleep(0.5)