Информация 4x4 keypad выходит неверно(pyfirmata)

Рейтинг: 0Ответов: 1Опубликовано: 24.03.2023

У меня есть программа, которая читает нажата ли кнопка на 4x4 keypad на pyfirmata(python). Проблема в том, что информация, которая выводит arduino uno, неверна. В чем ошибка?

Вот код:

import pyfirmata as pf
import time as tm

board = pf.Arduino("COM3")
pf.util.Iterator(board).start()

buttons = [
    ['0','a','b','9'],
    ['1','c','d','8'],
    ['2','e','f','7'],
    ['3','4','5','6'],
]

r1,c1 = board.get_pin("d:11:i"),board.get_pin("d:5:i")
r2,c2 = board.get_pin("d:10:i"),board.get_pin("d:4:i")
r3,c3 = board.get_pin("d:9:i"),board.get_pin("d:3:i")
r4,c4 = board.get_pin("d:8:i"),board.get_pin("d:2:i")

while True:
    try:
        print("----")
        print(int(r1.read()),int(r2.read()),int(r3.read()),int(r4.read()))
        print(int(c1.read()),int(c2.read()),int(c3.read()),int(c4.read()))
        print("----")
    except:
        pass
    tm.sleep(0.1)

Output:

----
0 0 0 0
0 0 0 0
----
----
1 1 1 1
1 1 0 1
----
----
0 0 0 0
0 0 1 0
----
----
0 1 1 0
0 1 1 1
----
----
0 0 0 0
0 0 1 0
----
----
1 1 1 1
1 1 1 1
----
----
0 0 0 0
0 0 0 0
----

Примечание: я не нажимал на кнопки.

Ответы

▲ 1

В вашем коде есть несколько проблем:

  1. Пины, которые вы используете для подключения к рядам и столбцам клавиатуры, настроены как входы, но им не установлен режим работы. Вместо "d:11:i", "d:10:i", "d:9:i" и "d:8:i", попробуйте использовать "d:11:p", "d:10:p", "d:9:p" и "d:8:p". Параметр p устанавливает режим работы как PWM, и он необходим для входов, которые считывают значения, а не управляют аппаратными компонентами.

  2. Ваша таблица кнопок настроена неправильно. Необходимо указать правильный порядок подключения. В вашем коде сначала подключается кнопка "a", а затем "b", что приводит к неверным результатам. Правильный порядок подключения, как в вашей таблице, должен быть следующим:

    buttons = [ ['1', '2', '3', 'A'], ['4', '5', '6', 'B'], ['7', '8', '9', 'C'], ['*', '0', '#', 'D'] ]

  3. Возможно, у вас проблемы с общим заземлением источника питания и компьютера. Попробуйте подключить заземление Arduino Uno к корпусу своего компьютера.

  4. Ошибка может быть связана с плохими контактами клавиатуры. Попробуйте снять и заново подключить провода клавиатуры к вашей плате и проверьте качество контактов. Если есть проблемы с проводами клавиатуры, она может выдавать неверные результаты.