Diode Keypad Matrix

By Z3r0CooL
int getRowPin(int r) {
  if (r == 0) return 7;
  if (r == 1) return 8;
  if (r == 2) return 12;
  return 13;
}

int getColPin(int c) {
  if (c == 0) return 5;
  if (c == 1) return 6;
  if (c == 2) return 9;
  return 10;
}

char getKey(int r, int c) {
  if (r == 0 && c == 0) return '1';
  if (r == 0 && c == 1) return '2';
  if (r == 0 && c == 2) return '3';
  if (r == 0 && c == 3) return 'A';

  if (r == 1 && c == 0) return '4';
  if (r == 1 && c == 1) return '5';
  if (r == 1 && c == 2) return '6';
  if (r == 1 && c == 3) return 'B';

  if (r == 2 && c == 0) return '7';
  if (r == 2 && c == 1) return '8';
  if (r == 2 && c == 2) return '9';
  if (r == 2 && c == 3) return 'C';

  if (r == 3 && c == 0) return '*';
  if (r == 3 && c == 1) return '0';
  if (r == 3 && c == 2) return '#';
  return 'D';
}

void setup() {
  Serial.begin(9600);

  for (int r = 0; r < 4; r++) {
    pinMode(getRowPin(r), INPUT);
  }

  for (int c = 0; c < 4; c++) {
    pinMode(getColPin(c), INPUT_PULLUP);
  }
}

void loop() {
  for (int r = 0; r < 4; r++) {
    int rowPin = getRowPin(r);

    pinMode(rowPin, OUTPUT);
    digitalWrite(rowPin, LOW);

    delay(1);

    for (int c = 0; c < 4; c++) {
      int colPin = getColPin(c);

      if (digitalRead(colPin) == LOW) {
        Serial.print("Pressed: ");
        Serial.println(getKey(r, c));

        while (digitalRead(colPin) == LOW) {
          delay(10);
        }

        delay(100);
      }
    }

    pinMode(rowPin, INPUT);
  }
}