Ввод информации с матрицы 4x4
Пишу код на Micropython для Raspberry pi Pico. Подключил экран 16х2 символа и матрицу с кнопками размером 4х4. Код работает следующим образом: 1)Вводим переменную a клавишами на матрице. 2) Вводим таким же образом переменную znac и переменную b, для выполнения дальнейших действий.
Проблема в следующем:
Когда выполняется команда a = buttonings(), все работает нормально и сохраняется значение в переменной "a", но потом идёт выполнение znac = buttonings() и b = buttonings(), но нет возможности ввести какие-либо значения, так как метод быстро проходит. В итоге получаются следующие значения:
a = "какое-то число"
znac = ""
b = ""
Ну и как следствие - при запуске метода clear_number() на переменную b выходит ошибка ValueError, потому что нет никакого числа для этого действия.
Ниже прилагаю код.
lcd.putstr() - вывод текста на экран 16x2.
sleep() - ожидание в миллисекундах.
KEY_UP = const(0)
KEY_DOWN = const(1)
keys = [['1', '2', '3', '/'], ['4', '5', '6', '*'], ['7', '8', '9', '-'], ['.', '0', '=', '+']]
# Pin names for Pico
rows = [8,7,6,5]
cols = [4,3,2,10]
# set pins for rows as outputs
row_pins = [Pin(pin_name, mode=Pin.OUT) for pin_name in rows]
# set pins for cols as inputs
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].low()
def scan(row, col):
# set the current column to high
row_pins[row].high()
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].low()
# return the key state
return key
def buttonings():
a = ""
lol = ""
init()
while lol != "=":
for row in range(4):
for col in range(4):
key = scan(row, col)
if key == KEY_DOWN:
lol = keys[row][col]
if lol != "=":
last_key_press = keys[row][col]
a += last_key_press
lcd.putstr(last_key_press)
sleep(0.3)
return a
#---------------------buttons------------------------
# Приводит число к понятному для пользователя результату
def clear_number(a):
if a - round(a) == 0:
return round(a)
else:
return a
#------------------------------------------
a = ""
lol = None
while True:
a = buttonings()
print(a)
a = clear_number(float(a))
znac = buttonings()
print(znac)
b = buttonings()
print(b)
b = clear_number(float(b))