Загрузка данных


const int rows[4] = {9, 8, 7, 6};   // r1, r2, r3, r4
const int cols[4] = {5, 4, 3, 2};   // c1, c2, c3, c4

char buttons[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);   // пока не сканируем — держим HIGH
  }

  for (int i = 0; i < 4; i++) {
    pinMode(cols[i], INPUT_PULLUP); // колонки с подтяжкой
  }

  Serial.println("Ready");
}

void loop() {
  for (int r = 0; r < 4; r++) {
    digitalWrite(rows[r], LOW);   // активируем одну строку

    for (int c = 0; c < 4; c++) {
      if (digitalRead(cols[c]) == LOW) {
        Serial.print("Nazhata knopka: ");
        Serial.println(buttons[r][c]);

        delay(200); // простая защита от дребезга
        while (digitalRead(cols[c]) == LOW) {
          ; // ждём, пока отпустят кнопку
        }
      }
    }

    digitalWrite(rows[r], HIGH);  // выключаем строку
  }
}