Не работает первая кнопка матричной клавиатуры
- Войдите на сайт для отправки комментариев
Добрй день. Буду благодарен за помощь. Ситуация следующая.
Собрал матричную клавиатуру 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;
}
}
}
}
}
Разобрался. Надо было здесь отсчет кнопок начинать с нуля, а не с единицы:
byte buttons[NUMROWS][NUMCOLS] = { {0,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. Всем спасибо.