Не работает первая кнопка матричной клавиатуры
- Войдите на сайт для отправки комментариев
Добрй день. Буду благодарен за помощь. Ситуация следующая.
Собрал матричную клавиатуру 6х6 для игровой панели. Подключил к цифровым пинам Arduino Pro Micro. Залил скетч - все работает, кроме первой кнопки. Скетч писал не сам, а надергал по частям из интернета.
Проблема явно не аппаратная, так как матрица собрана корректно и после замены кнопки проблема сохранилась. Всегда не работает именно кнопка "1", находящаяся на пересечении последнего ряда и последней колонки. В данном слчуае это ряд на цифровом пине 7 и колонка на цифровом пине 14. Но если я поменяю порядок рядов или колонок, номера кнопок сменятся, и та, что окажется первой, всё равно не будет работать.
Вот как выгоядит код, который я использовал:
include <Key.h> #include <Keypad.h> #include <Joystick.h> #define ENABLE_PULLUPS #define NUMBUTTONS 36 #define NUMROWS 6 #define NUMCOLS 6 //define the symbols on the buttons of the keypads byte buttons[NUMROWS][NUMCOLS] = { {1,2,3,4,5,6}, {7,8,9,10,11,12}, {13,14,15,16,17,18}, {19,20,21,22,23,24}, {25,26,27,28,29,30}, {31,32,33,34,35,36}, }; byte rowPins[NUMROWS] = {2,3,4,5,6,7}; //connect to the row pinouts of the keypad byte colPins[NUMCOLS] = {15,8,9,10,16,14}; //connect to the column pinouts of the keypad //initialize an instance of class NewKeypad Keypad buttbx = Keypad( makeKeymap(buttons), rowPins, colPins, NUMROWS, NUMCOLS); //initialize an Joystick with 36 buttons; Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_JOYSTICK, 36, 0, false, false, false, false, false, false, false, false, false, false, false); void setup() { Joystick.begin(); } void loop() { CheckAllButtons(); } void CheckAllButtons(void) { if (buttbx.getKeys()) { for (int i=0; i<LIST_MAX; i++) // Scan the whole key list. { if ( buttbx.key[i].stateChanged ) // Only find keys that have changed state. { switch (buttbx.key[i].kstate) { // Report active key state : IDLE, PRESSED, HOLD, or RELEASED case PRESSED: case HOLD: Joystick.setButton(buttbx.key[i].kchar, 1); break; case RELEASED: case IDLE: Joystick.setButton(buttbx.key[i].kchar, 0); break; } } } } }
Разобрался. Надо было здесь отсчет кнопок начинать с нуля, а не с единицы:
Теперь работают все 36. Всем спасибо.