Матричная клавиатура 4×4 и Arduino: схема подключения, библиотека Keypad и скетч
Шестнадцать кнопок, а выводов всего восемь — в этом весь смысл матричной клавиатуры. Кнопки стоят на пересечениях четырёх строк и четырёх столбцов, и каждая замыкает свою строку со своим столбцом. Плата по очереди опрашивает строки и смотрит, на каком столбце появился сигнал.
Плёночная клавиатура — это буквально наклейка толщиной меньше миллиметра с гибким шлейфом на восемь контактов. Её приклеивают на корпус, она не боится влаги и стоит дёшево. Расплата — невнятное нажатие: тактильной отдачи почти нет.
Схема подключения
Распиновка
| Провод | Куда и зачем |
|---|---|
| Выводы 1–4 | Строки матрицы. Любые цифровые выводы, работают на выход. |
| Выводы 5–8 | Столбцы матрицы. Любые цифровые выводы, работают на вход с подтяжкой. |
| Питание | Не требуется. Внутри клавиатуры только кнопки, без электроники. |
Характеристики
- Количество кнопок
- 16 (4 × 4)
- Занимает выводов
- 8
- Толщина
- менее 1 мм
- Ресурс
- около миллиона нажатий
- Питание
- не нужно
- Защита от фантомных нажатий
- нет — диодов внутри не предусмотрено
Как определить, где строки, а где столбцы
На шлейфе клавиатуры подписей обычно нет, а порядок выводов у разных производителей отличается. Надёжный способ — прозвонить мультиметром в режиме проверки цепи: нажмите кнопку в левом верхнем углу и найдите пару выводов, которая при этом замыкается. Один из них — первая строка, второй — первый столбец.
Способ без мультиметра: подключить наугад и загрузить скетч, который печатает нажатую кнопку. Если вместо цифр печатаются буквы или кнопки смещены, поменяйте местами группы проводов в описании массива в скетче — переподключать физически ничего не нужно.
Библиотека
Keypad— Ставится через менеджер библиотек, автор Mark Stanley. Берёт на себя всё сканирование матрицы и подавление дребезга — вам остаётся только описать раскладку.
Готовый скетч
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 4;
// раскладка: как надписи расположены физически на клавиатуре
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
const String PASSWORD = "1234";
String entered = "";
void setup() {
Serial.begin(9600);
Serial.println("Введите код и нажмите #");
}
void loop() {
char key = keypad.getKey();
if (!key) return; // ничего не нажато
if (key == '#') {
if (entered == PASSWORD) {
Serial.println("Верно");
} else {
Serial.println("Неверно");
}
entered = "";
} else if (key == '*') {
entered = ""; // сброс ввода
Serial.println("Сброшено");
} else {
entered += key;
Serial.print("*"); // не показываем сам код
}
}Скетч собирается arduino-cli под Arduino UNO
Функция getKey не ждёт нажатия, а мгновенно возвращает ноль, если ничего не нажато. Поэтому её можно вызывать в каждом проходе цикла, не блокируя остальную программу.
Частые ошибки
Нажимаешь одну кнопку, печатается другая
Перепутаны местами строки и столбцы. Поменяйте массивы rowPins и colPins в скетче — физически перекладывать провода не нужно.
Часть кнопок не работает вовсе
Обычно это плохой контакт шлейфа в разъёме: плёночный шлейф тонкий и легко выскакивает. Проверьте прозвонкой каждую пару выводов.
При нажатии трёх кнопок появляется четвёртая
Фантомное нажатие — врождённое свойство матрицы без диодов. Лечится только диодом в каждой кнопке, чего в плёночных клавиатурах не бывает. На практике мешает редко: пароли набирают по одной кнопке.
Одно нажатие считается несколько раз
Дребезг контактов. Библиотека Keypad подавляет его сама, но если писать сканирование вручную, придётся добавлять задержку в несколько миллисекунд.
Клавиатура заняла все выводы, а нужен ещё дисплей
Восемь выводов из тринадцати — это много. Либо возьмите клавиатуру 4×3 и сэкономьте один вывод, либо подключите дисплей по I2C, который занимает всего два.
Что понадобится
- Плёночная матричная клавиатура 4×4
- Arduino UNO
- Провода «папа-мама»