int rows[] = {23, 4, 16, 32, 33, 25}; // Pin untuk baris
int cols[] = {0, 1, 2, 3, 4, 5, 6, 7}; // Pin untuk kolom
char keys[6][8] = {
{'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I'},
{'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K'},
{'Z', 'X', 'C', 'V', 'B', 'N', 'M', ','},
{'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K'},
{'1', '2', '3', '4', '5', '6', '7', '8'},
{'Z', 'X', 'C', 'V', 'B', 'N', 'M', '.'} // Mengganti koma terakhir menjadi titik
};
void setup() {
Serial.begin(115200);
Serial.println("Keyboard Ready!");
// Inisialisasi pin rows sebagai OUTPUT
for (int i = 0; i < 6; i++) {
pinMode(rows[i], OUTPUT);
digitalWrite(rows[i], HIGH); // Baris diset HIGH
}
// Inisialisasi pin cols sebagai INPUT_PULLUP
for (int i = 0; i < 8; i++) {
pinMode(cols[i], INPUT_PULLUP);
}
// Inisialisasi pin untuk CD74HC4067
pinMode(15, OUTPUT); // S0
pinMode(14, OUTPUT); // S1
pinMode(13, OUTPUT); // S2
pinMode(12, OUTPUT); // S3
pinMode(34, INPUT); // SIG
}
void loop() {
// Scan baris dan kolom untuk mendeteksi tombol yang ditekan
for (int i = 0; i < 6; i++) {
digitalWrite(rows[i], LOW); // Aktifkan baris i
// Atur pin S0-S3 untuk memilih kolom yang sesuai
for (int j = 0; j < 8; j++) {
digitalWrite(15, j & 0x01); // S0
digitalWrite(14, (j >> 1) & 0x01); // S1
digitalWrite(13, (j >> 2) & 0x01); // S2
digitalWrite(12, (j >> 3) & 0x01); // S3
// Baca status tombol dari SIG
if (digitalRead(34) == LOW) { // Jika tombol ditekan
Serial.print("Tombol ");
Serial.print(keys[i][j]); // Cetak huruf tombol yang ditekan
Serial.println(" ditekan!");
delay(300); // Debounce sederhana
}
}
digitalWrite(rows[i], HIGH); // Matikan baris i
}
}
Loading
cd74hc4067
cd74hc4067