#61Новичок

Работа с клавиатурой 3x4

4.5(24)
31 собрано
Работа с клавиатурой 3x4
Arduino сразу узнаёт, какая клавиша нажата на 12-клавишной клавиатуре, похожей на кнопки телефона, и выводит её на экран компьютера. Цифры, а также клавиши звёздочки и решётки расположены сеткой из строк и столбцов, и Arduino проверяет эту сетку, чтобы найти нажатую клавишу. Первый шаг к проектам вроде кодового замка или калькулятора.

Видео

Схема

Работа с клавиатурой 3x4 - Circuit

Исходный код

C++ (Arduino IDE)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Работа с клавиатурой 3x4
4// ─────────────────────────────────────────
5// Нажатая на клавиатуре 3x4 клавиша читается и выводится в монитор порта
6// (9600 бод). Библиотека Keypad опрашивает строки и столбцы.
7//
8// Пины:
9//   D8, D7, D6, D5 -> Строки клавиатуры 1-4
10//   D4, D3, D2     -> Столбцы клавиатуры 1-3
11
12#include <Keypad.h>
13
14const byte ROWS = 4;   // Количество строк
15const byte COLS = 3;   // Количество столбцов
16
17// Раскладка клавиатуры
18char keys[ROWS][COLS] = {
19  {'1', '2', '3'},
20  {'4', '5', '6'},
21  {'7', '8', '9'},
22  {'*', '0', '#'}
23};
24
25byte rowPins[ROWS] = {8, 7, 6, 5};   // Пины строк
26byte colPins[COLS] = {4, 3, 2};      // Пины столбцов
27
28Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
29
30void setup() {
31  Serial.begin(9600);
32  Serial.println("Keypad Initialized...");
33}
34
35void loop() {
36  // Получить нажатую клавишу, NO_KEY, если нажатия нет
37  char pressedKey = keypad.getKey();
38
39  if (pressedKey != NO_KEY) {
40    Serial.print("Pressed Key: ");
41    Serial.println(pressedKey);
42  }
43}
44

Частые вопросы

Чем клавиатура 3x4 отличается от 4x4?

У клавиатуры 3x4 3 столбца + 4 строки (12 клавиш); у 4x4 — 4+4 (16 клавиш). Для компактных проектов хватает 3x4; если нужны дополнительные клавиши вроде букв (A, B, C, D), выбирают 4x4.

Как определить порядок выводов?

Посмотри на маркировку на обороте клавиатуры или в её даташите — обычно 7 выводов идут слева в порядке ROW1, ROW2, ROW3, ROW4, COL1, COL2, COL3. В коде сначала задай пины строк, затем пины столбцов.

Блокирует ли getKey() выполнение?

Нет, `keypad.getKey()` не блокирует; он возвращает нажатый символ, если он есть, а иначе `NO_KEY` (=0). Его можно постоянно вызывать в цикле, не останавливая другие задачи.