Определенные значения не отображаются при использовании цифровой клавиатуры

Я подключил к Arduino Leonardo клавиатуру 3х4 в качестве метода ввода. Всякий раз, когда я нажимаю кнопки, большинство клавиш работают, а некоторые нет. Вот мой код, я настроил его на звуковой сигнал пьезозуммера при нажатии клавиши.

#include <Keypad.h>

int buzzerPin = 0;
const byte ROWS = 4; //четыре строки
const byte COLS = 3; //три столбца
char keys[ROWS][COLS] = {
    {'1','2','3'},
    {'4','5','6'},
    {'7','8','9'},
    {'*','0','#'}
};
byte rowPins[ROWS] = {12, 13, 8, 10}; //подключаемся к выводам строк клавиатуры
byte colPins[COLS] = {11, 7, 9}; //подключаемся к выводам колонки клавиатуры

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

void setup(){
    Serial.begin(9600);
    pinMode(buzzerPin, OUTPUT); //Устанавливаем buzzerPin в качестве вывода
    keypad.addEventListener(keypadEvent); //Добавляем прослушиватель событий для клавиатуры
}

void loop(){
    char key = keypad.getKey();
}

void keypadEvent(KeypadEvent eKey) {
        // Когда будет нажата клавиатура, результаты появятся на последовательном мониторе.
        switch (keypad.getState()) {
        case PRESSED:
                Serial.print("Enter: ");
                Serial.println(eKey);
                beep(10);
                delay(10);
                break;
        }
}

void beep(unsigned char delayms) { //создание функции
    tone(buzzerPin, 2000); //Установка вывода на высокий уровень
    delay(delayms); //Задержка
    noTone(buzzerPin); //Устанавливаем вывод на НИЗКИЙ уровень
    delay(delayms); //Задержка
}

Я построил свои строки/столбцы на основе этой распиновки: https:// www.jaycar.com.au/12-key-numeric-keypad/p/SP0770, но позже я узнал, что некоторые столбцы пришлось поменять местами :P

Вот схема того, что происходит: Схема работающих и неработающих клавиш

Клавиши красного цвета не работают.

Я бы не стал публиковать это на Stack Exchange, но это выглядит как странно специфичный шаблон, и что бы я ни менял, это не сработало.

(И да, это именно та клавиатура, которую я купил у Jaycar)

Изменить: я забыл упомянуть, что использовал прототип экрана для подключения клавиатуры, но подтверждено, что все контакты работают над этим.

, 👍3

Обсуждение

Если используется либо строка №2, либо столбец №2, то это не работает, если не используются оба. Вы как-то поменяли местами/смешали строку №2 и столбец №2? В этом должна быть какая-то логика. Можете ли вы отключить клавиатуру и проверить каждую кнопку мультиметром? Пожалуйста, скажите, какие контакты arduino подключены к каким контактам клавиатуры., @Jot

Еще один вопрос: это дешевый клон платы? Потому что ряд № 2 подключен к выводу 13. Официальная arduino leonardo имеет дополнительную логическую микросхему, поэтому вывод 13 можно использовать как вход без проблем. Попробуйте использовать другой вывод для ряда № 2. Обновите свой вопрос, добавив дополнительную информацию., @Jot

Согласен с @Jot, строка № 2 поменяна местами со столбцом № 2. Попробуйте изменить код следующим образом: "byte rowPins[ROWS] = {12, 7, 8, 10}; //подключиться к выводам строки клавиатуры byte colPins[COLS] = {11, 13, 9}; //подключиться к выводам столбцов клавиатуры, чтобы посмотреть, может ли изменение кода устранить проблему., @st2000

вы уверены, что 5 действительно работает?, @jsotola

Итак, теперь я разобрался (спасибо вам, ребята), оказывается, что да, на самом деле строка 2 и столбец 2 были перепутаны местами. Я также забыл упомянуть, что это был прототип щита, в который я вставлял штырьки, но спасибо всем за быстрые и полезные ответы. Что касается того, чтобы отметить этот вопрос как отвеченный, я довольно новичок в этом... Мне просто процитировать одного из вас выше в моей кнопке ответа? Или мне нужен модератор или что-то в этом роде?, @Neonalig

Когда @Jot увидит это, он, скорее всего, опубликует свой ответ, и вы сможете выбрать его в качестве ответа., @linhartr22


1 ответ


Лучший ответ:

0

Строка против строки не работает, или столбец против столбца.
Это значит, что этому есть логическое объяснение. Строка №2 заменена столбцом №2.
Кнопка 5 работает, потому что она все еще имеет строку напротив столбца (но наоборот).

,