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()