Матричная клавиатура
1
2
3
4
5
6
7
8
С4
С3
С2
С1
R1
R2
R3
R4
- Колонка 4
- Колонка 3
- Колонка 2
- Колонка 1
- Строка 1
- Строка 2
- Строка 3
- Строка 4
  • Клавиатура имеет 8 выводов, подключаемых к цифровым пинам Arduino.
  • Принцип работы матричной клавиатуры в том, что мы подаем напряжение на одну из строк, а затем проверяем, на каком столбце появилось напряжение. На перекрестье нажата кнопка.
  • Для упрощения работы с клавиатурой можно пользоваться библиотекой Keypad. В Arduino IDE переходим в Инструменты-> Управление библиотеками.. и в поисковой строке пишем Keypad. В списке находим и устанавливаем библиотеку с названием Keypad.
Типовая схема подключения
Методы библиотеки Keypad
Библиотека матричной клавиатуры<Keypad.h>.
.begin(makeKeymap(userKeymap)); - инициализация клавиатуры. Передается двумерный массив со значениями кнопок.
.waitForKey(); - ожидает бесконечно, пока не будет нажата любая кнопка.
.getKey(); - возвращает нажатую кнопку.
.getState(); - Возвращает состояние клавиатуры IDLE, PRESSED, RELEASED and HOLD
.keyStateChanged(); - возвращает истину, если состояние кнопки изменилось
setHoldTime(unsigned int time); - установка времени в миллисекундах, когда кнопка считается зажатой
.setDebounceTime(unsigned int time); - установка времени в миллисекундах, сколько должна быть удержана кнопка, чтобы считаться нажатой или отпущенной. Для устранения дребезга кнопок.
.addEventListener(keypadEvent);- добавить функцию-обработчик специальных событий нажатия клавиш
Подробное описание библиотеки с примерами здесь.
Пример кода
#include <Keypad.h>
const byte ROWS = 4; // 4 строки
const byte COLS = 4; // 4 столбца
 
// определим символы для кнопок
char hexaKeys[ROWS][COLS] = {
  {'0','1','2','3'},
  {'4','5','6','7'},
  {'8','9','A','B'},
  {'C','D','E','F'}
};
 
byte rowPins[COLS] = {6, 7, 8, 9}; // цифровые выводы столбцов 
byte colPins[ROWS] = {5, 4, 3, 2}; // цифровые выводы строк
// используем класс библиотеки
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), colPins, rowPins, COLS, ROWS);  
 
void setup(){
  Serial.begin(9600);
}   
 
void loop(){
  // вывод в монитор порта значения кнопки
  char customKey = customKeypad.getKey(); 
  if (customKey){
    Serial.println(customKey);
  }
}