Подключение клавиатуры 4×4 к Arduino
Матричная клавиатура
Клавиатура 4×4 к Arduino Uno и Nano занимает восемь цифровых выводов, например D2–D5 под строки и D6–D9 под столбцы, и не требует дополнительных деталей.
Схема подключения клавиатуры 4×4 к Arduino
| Клавиатура 4×4 | Arduino Uno |
|---|---|
| C1 | D6 |
| C2 | D7 |
| C3 | D8 |
| C4 | D9 |
| R1 | D2 |
| R2 | D3 |
| R3 | D4 |
| R4 | D5 |
Схема из примера «Arduino Uno: клавиатура 4x4 без библиотеки».
Выводы Клавиатура 4×4
| Вывод | Назначение |
|---|---|
| C1 | столбец 1 |
| C2 | столбец 2 |
| C3 | столбец 3 |
| C4 | столбец 4 |
| R1 | строка 1 |
| R2 | строка 2 |
| R3 | строка 3 |
| R4 | строка 4 |
Код для Arduino
// Матричная клавиатура: шестнадцать кнопок на восьми выводах.
//
// Кнопки стоят на пересечениях четырёх строк и четырёх столбцов.
// Отдельного провода у кнопки нет — есть провод строки и провод
// столбца, и нажатие их соединяет.
//
// Отсюда способ опроса. Строки — выходы, и по очереди одна из них
// прижимается к земле. Столбцы — входы с подтяжкой, и тот из них, что
// стал LOW, пересекается с прижатой строкой ровно в одной точке. Это и
// есть нажатая кнопка.
//
// Восемь выводов вместо шестнадцати — ради этого всё и затевалось.
const int ROWS[4] = { 2, 3, 4, 5 };
const int COLS[4] = { 6, 7, 8, 9 };
const char KEYS[4][4] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' },
};
void setup() {
Serial.begin(9600);
for (int i = 0; i < 4; i++) {
pinMode(ROWS[i], OUTPUT);
digitalWrite(ROWS[i], HIGH);
pinMode(COLS[i], INPUT_PULLUP);
}
Serial.println("нажимайте клавиши на схеме");
}
char scan() {
for (int r = 0; r < 4; r++) {
digitalWrite(ROWS[r], LOW);
for (int c = 0; c < 4; c++) {
if (digitalRead(COLS[c]) == LOW) {
digitalWrite(ROWS[r], HIGH);
return KEYS[r][c];
}
}
digitalWrite(ROWS[r], HIGH);
}
return 0;
}
void loop() {
char key = scan();
if (key) {
Serial.print("нажато: ");
Serial.println(key);
delay(200);
}
}
Скетч можно править и запускать в симуляторе без платы и установки среды.
Что учесть на Arduino
- Если выводов не хватает, клавиатуру подключают через I2C-расширитель PCF8574 (всего два вывода).
- Клавиши опрашиваются сканированием, поэтому длинный
delay()вloop()пропускает нажатия.
Частые ошибки при подключении к Arduino
- Занять D0 и D1 под клавиатуру: они нужны для Serial, загрузка скетча и отладка перестают работать.
- Перепутать порядок строк и столбцов: символы клавиш не совпадают с нарисованными, проверьте массив раскладки и порядок выводов.
- Перепутаны строки и столбцы — клавиши путаются местами. Поменяйте массивы выводов в коде.
- Нажатие двух-трёх кнопок сразу даёт «фантомную» четвёртую — у матрицы без диодов это неизбежно.
delay()вloop—getKey()вызывается редко и пропускает короткие нажатия.
Ещё по теме
Другие детали для Arduino
HC-SR04DHT22 (AM2302)BME280DS3231SSD1306 OLED 0,96″LCD 1602 с I2CMAX7219TM1637Модуль релеKY-040HX711ФоторезисторМодуль microSDRGB-светодиодСервопривод SG9074HC595Шаговый двигательКнопкаПотенциометрПьезопищалкаСветодиодПолзунковый переключательHC-SR501TTP223Датчик влажности почвыMQ-2LM35Джойстик KY-023DHT11HTU21D