from machine import Pin, SoftI2C, PWM
import ssd1306
from time import sleep_ms
i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=10000)
ledR = Pin(19,Pin.OUT)
ledG = Pin(18, Pin.OUT)
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
servo = PWM(Pin(15),freq=50)
# CONSTANTS
KEY_UP = const(0)
KEY_DOWN = const(1)
keys = [['1', '4', '7', '*'],
['2', '5', '8', '0'],
['3', '6', '9', '#'],
['A', 'B', 'C', 'D']]
cols = [13,12,14,27]
rows = [26,25,33,32]
row_pins = [Pin(pin_name, mode=Pin.OUT) for pin_name in rows]
col_pins = [Pin(pin_name, mode=Pin.IN, pull=Pin.PULL_DOWN) for pin_name in cols]
def init():
for row in range(0,4):
for col in range(0,4):
row_pins[row].value(0)
def scan(row, col):
# set the current column to high
row_pins[row].value(1)
key = None
# check for keypressed events
if col_pins[col].value() == KEY_DOWN:
key = KEY_DOWN
if col_pins[col].value() == KEY_UP:
key = KEY_UP
row_pins[row].value(0)
# return the key state
return key
init()
enter_pass = []
correct_pass = ['1','6','0','2']
i = 0
oled.text("ENTER PASSWORD:",0,0)
oled.show()
while True:
for row in range(4):
for col in range(4):
key = scan(row, col)
if key == KEY_DOWN:
if keys[row][col] == '#' :
if enter_pass == correct_pass :
ledG.value(1)
oled.text("CORRECT!", 10,40)
oled.show()
servo.duty(124)
sleep_ms(5000)
servo.duty(75)
ledG.value(0)
else :
ledR.value(1)
oled.text("WRONG !",10,40)
oled.show()
sleep_ms(100)
oled.fill(0)
oled.show()
ledR.value(0)
oled.text("ENTER PASSWORD",0,0)
oled.show()
enter_pass = []
i=0
elif keys[row][col] == 'D' :
servo.duty(75)
ledG.value(0)
oled.fill(0)
sleep_ms(200)
oled.text("ENTER PASSWORD",0,0)
oled.show()
i=0
else :
i = i+1
if(i == 1) :
enter_pass.append(keys[row][col])
oled.text(keys[row][col], 8,20)
oled.show()
sleep_ms(10)
oled.text("*",8,20)
oled.show()
elif(i == 2) :
enter_pass.append(keys[row][col])
oled.text(keys[row][col], 18,20)
oled.show()
sleep_ms(10)
oled.text("*",18,20)
oled.show()
elif(i == 3) :
enter_pass.append(keys[row][col])
oled.text(keys[row][col], 28,20)
oled.show()
sleep_ms(10)
oled.text("*",28,20)
oled.show()
else :
enter_pass.append(keys[row][col])
oled.text(keys[row][col], 38,20)
oled.show()
sleep_ms(10)
oled.text("*",38,20)
oled.show()
sleep_ms(10)