from machine import Pin
import utime
# khai báo nút
key_bad = [
[1, 4, 7, '*'],
[2, 5, 8, 0],
[3, 6, 9, '#'],
['A', 'B', 'C', 'D']
]
# thời gian chờ nhấn liên tục
time_noise = 20
# thời gian lần nhấn phím cuối cùng
last_press_time = 0
# khai báo các cột
c1 = Pin(13, Pin.OUT)
c2 = Pin(12, Pin.OUT)
c3 = Pin(14, Pin.OUT)
c4 = Pin(17, Pin.OUT)
col = [c1, c2, c3, c4]
# khai báo các hàng
r1 = Pin(26, Pin.IN, Pin.PULL_DOWN)
r2 = Pin(25, Pin.IN, Pin.PULL_DOWN)
r3 = Pin(33, Pin.IN, Pin.PULL_DOWN)
r4 = Pin(32, Pin.IN, Pin.PULL_DOWN)
row = [r1, r2, r3, r4]
# mật khẩu test
password = 1234
def scan_key():
global last_press_time
pass_current = ''
while True:
# quét cột
number = ''
for c in range(len(col)):
col[c].value(1)
# quét dòng
for r in range(len(row)):
if row[r].value() == 1:
# tránh nhấn phím liên tục
current_time = utime.ticks_ms() # lấy thời gian hiện tại
if utime.ticks_diff(current_time, last_press_time) > time_noise:
last_press_time = current_time
number = key_bad[c][r] # lấy giá trị từ key_bad
utime.sleep_ms(1)
col[c].value(0)
if len(str(number)) > 0:
print(number)
pass_current += str(number) # chắc chắn rằng pass_current là chuỗi
if pass_current.isdigit() and len(str(pass_current)) == 4:
pass_current = int(pass_current) # chuyển pass_current thành số
if password == pass_current:
print("Bạn đã nhập chính xác mật khẩu!")
else:
print("Bạn đã nhập sai mật khẩu!")
elif len(pass_current) == 4:
pass_current = ''
print('RESET PASS: không được nhập ký tự!')
scan_key()