Подключение клавиатуры 4×4 к Arduino

Матричная клавиатура

Клавиатура 4×4 к Arduino Uno и Nano занимает восемь цифровых выводов, например D2–D5 под строки и D6–D9 под столбцы, и не требует дополнительных деталей.

Схема подключения клавиатуры 4×4 к Arduino

Клавиатура 4×4Arduino Uno
C1D6
C2D7
C3D8
C4D9
R1D2
R2D3
R3D4
R4D5

Схема из примера «Arduino Uno: клавиатура 4x4 без библиотеки».

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

Частые ошибки при подключении к Arduino

Другие детали для Arduino