from machine import Pin, I2C
from time import sleep
from pico_i2c_lcd import I2cLcd
sda = Pin(0)
scl = Pin(1)
i2c = I2C(0, sda=sda, scl=scl, freq=40000)
I2C_ADDR = 39
I2C_ROWS = 2
I2C_COLS = 16
lcd = I2cLcd(i2c, I2C_ADDR, I2C_ROWS, I2C_COLS)
matrix_keys = [['1', '2', '3', 'A'],
['4', '5', '6', 'B'],
['7', '8', '9', 'C'],
['*', '0', '#', 'D']]
keypad_rows = [9, 8, 7, 6]
keypad_columns = [5, 4, 3, 2]
pin = ["7", "8", "6", "0"]
guess = []
gled = Pin(27, Pin.OUT)
rled = Pin(28, Pin.OUT)
relay = Pin(20, Pin.OUT)
col_pins = []
row_pins = []
for x in range(4):
row_pins.append(Pin(keypad_rows[x], Pin.OUT))
col_pins.append(Pin(keypad_columns[x], Pin.IN, Pin.PULL_DOWN))
def scankeys():
cursor_pos = 0
for row in range(4):
row_pins[row].value(1)
for col in range(4):
if col_pins[col].value() == 1:
key_press = matrix_keys[row][col]
print("Key Press:", key_press)
sleep(0.3)
guess.append(key_press)
lcd.move_to(cursor_pos, 1)
lcd.putstr(''.join(guess))
cursor_pos += 1
sleep(0.3)
if len(guess) == len(pin):
lcd.clear()
checkPin(guess)
guess.clear()
row_pins[row].value(0)
def checkPin(guess):
if guess == pin:
print("Inventory is Unlocked")
gled.value(1)
relay.value(1)
lcd.putstr("Unlocked")
else:
rled.value(1)
print("Wrong Pin!!! Inventory remains locked")
lcd.putstr("Wrong Pin")
def main():
lcd.putstr("System")
lcd.move_to(0, 1)
lcd.putstr("Starting Up...")
sleep(2)
lcd.clear()
lcd.move_to(0, 0)
lcd.putstr("Enter The Pin")
while True:
scankeys()
main()