#define KEY_COL_1 A0 // Pin pre stĺpec 1 klávesnice
#define KEY_COL_2 A1 // Pin pre stĺpec 2 klávesnice
#define KEY_COL_3 A2 // Pin pre stĺpec 3 klávesnice
#define KEY_COL_4 A3 // Pin pre stĺpec 4 klávesnice
#define KEY_ROW_1 9 // Pin pre riadok 1 klávesnice
#define KEY_ROW_2 8 // Pin pre riadok 2 klávesnice
#define KEY_ROW_3 7 // Pin pre riadok 3 klávesnice
#define KEY_ROW_4 6 // Pin pre riadok 4 klávesnice
// Definícia kláves na klávesnici
char keys[4][4] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
// Funkcia na získanie stlačeného klávesu
char getKey() {
for (byte row = 0; row < 4; row++) {
// Nastavenie riadkov ako výstupov a vysokých úrovní
pinMode(KEY_ROW_1, OUTPUT);
pinMode(KEY_ROW_2, OUTPUT);
pinMode(KEY_ROW_3, OUTPUT);
pinMode(KEY_ROW_4, OUTPUT);
digitalWrite(KEY_ROW_1, HIGH);
digitalWrite(KEY_ROW_2, HIGH);
digitalWrite(KEY_ROW_3, HIGH);
digitalWrite(KEY_ROW_4, HIGH);
// Nastavenie aktívneho riadka na nízku úroveň
switch (row) {
case 0:
digitalWrite(KEY_ROW_1, LOW);
break;
case 1:
digitalWrite(KEY_ROW_2, LOW);
break;
case 2:
digitalWrite(KEY_ROW_3, LOW);
break;
case 3:
digitalWrite(KEY_ROW_4, LOW);
break;
}
// Čítanie stĺpcov
for (byte col = 0; col < 4; col++) {
// Ak je stĺpec aktívny (LOW), vráti príslušný kláves
if (digitalRead(KEY_COL_1 + col) == LOW) {
while (digitalRead(KEY_COL_1 + col) == LOW);
return keys[row][col];
}
}
}
return '\0'; // Ak nie je stlačený žiaden kláves, vráti nulu
}
void setup() {
Serial.begin(9600); // Inicializácia sériovej komunikácie
// Nastavenie stĺpcov ako vstupov s pull-up odporom
pinMode(KEY_COL_1, INPUT_PULLUP);
pinMode(KEY_COL_2, INPUT_PULLUP);
pinMode(KEY_COL_3, INPUT_PULLUP);
pinMode(KEY_COL_4, INPUT_PULLUP);
}
void loop() {
char key = getKey(); // Získanie stlačeného klávesu
if (key != '\0') { // Ak bol stlačený kláves, vypíše ho na sériovú linku
Serial.println(key);
delay(100);
}
}