const int numRows = 4; // jumlah baris pada keypad
const int numCols = 3; // jumlah kolom pada keypad
const int debounceTime = 20; // jumlah milidetik untuk membuat switch menjadi stabil
const char keymap[numRows][numCols] =
{
{ '1', '2', '3' } ,
{ '4', '5', '6' } ,
{ '7', '8', '9' } ,
{ '*', '0', '#' }
};
const int rowPins[numRows] = { 7, 2, 3, 6 }; // pin untuk baris 0 hingga 3
const int colPins[numCols] = { 5, 8, 4 }; // pin untuk kolom 0 hingga 2
void setup() {
Serial.begin(9600);
for (int row = 0; row < numRows; row++) {
pinMode(rowPins[row], INPUT); // Mengatur pin baris sebagai input
digitalWrite(rowPins[row], HIGH); // Mengaktifkan pull-up
}
for (int column = 0; column < numCols; column++) {
pinMode(colPins[column], OUTPUT); // Mengatur pin kolom sebagai output untuk penulisan
digitalWrite(colPins[column], HIGH); // Membuat semua kolom tidak aktif
}
}
void loop() {
char key = getKey();
if (key != 0) {
// Jika karakter bukan 0 maka itu adalah tekanan tombol yang valid
Serial.print("Got key ");
Serial.println(key);
}
}
char getKey() {
char key = 0; // 0 menunjukkan bahwa tidak ada tombol yang ditekan
for (int column = 0; column < numCols; column++) {
digitalWrite(colPins[column], LOW); // Mengaktifkan kolom saat ini.
for (int row = 0; row < numRows; row++) {
if (digitalRead(rowPins[row]) == LOW) {
delay(debounceTime); // Debounce
while (digitalRead(rowPins[row]) == LOW) ; // Tunggu hingga tombol dilepaskan
key = keymap[row][column]; // Ingat tombol mana yang ditekan.
}
}
digitalWrite(colPins[column], HIGH); // Menonaktifkan kolom saat ini.
}
return key; // Mengembalikan tombol yang ditekan atau 0 jika tidak ada
}