#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Ubah alamat I2C (0x27) sesuai dengan konfigurasi modul LCD Anda
const int ROWS = 4;//mendefinisikan matriks keys sebagai baris
const int COLS = 4;//mendefinisikan matriks keys sebagai kolom
char keys[ROWS][COLS] = {// membuat konfigurasi matrik sesuai dengan nama tombol
// Baris 1 (indeks 0) pada matriks keys berisi tombol '1', '2', '3', dan 'A'.
//Baris 2 (indeks 1) pada matriks keys berisi tombol '4', '5', '6', dan 'B'.
//Baris 3 (indeks 2) pada matriks keys berisi tombol '7', '8', '9', dan 'C'.
//Baris 4 (indeks 3) pada matriks keys berisi tombol '*', '0', '#', dan 'D'.
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {2, 3, 4, 5}; // Pin baris terhubung ke pin 2, 3, 4, 5
byte colPins[COLS] = {6, 7, 8, 9}; // Pin kolom terhubung ke pin 6, 7, 8, 9
String inputNumber = ""; // Variabel untuk menyimpan angka yang dimasukkan
void setup() {
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("tekan tombol:");
lcd.setCursor(0, 1);
lcd.print("test keypad");
// Set pin baris sebagai INPUT_PULLUP
for (int i = 0; i < ROWS; i++) {
pinMode(rowPins[i], INPUT_PULLUP);
}
// Set pin kolom sebagai OUTPUT dan inisialisasi HIGH
for (int i = 0; i < COLS; i++) {
pinMode(colPins[i], OUTPUT);
digitalWrite(colPins[i], HIGH);
}
}
void loop() {
char key = keypadScan();
if (key != '\0') {
if (key == 'C') {
inputNumber = ""; // Menghapus angka yang dimasukkan
} else {
inputNumber += key; // Menambahkan karakter angka ke variabel inputNumber
}
lcd.setCursor(0, 1);
lcd.print(" "); // Menghapus tampilan angka sebelumnya pada baris kedua
lcd.setCursor(0, 1);
lcd.print(inputNumber); // Menampilkan angka yang dimasukkan pada baris kedua
delay(200); // Tambahkan penundaan agar tampilan LCD tidak berubah terlalu cepat
}
delay(100);
}
char keypadScan() {
char key = '\0';
for (int col = 0; col < COLS; col++) {
// Set pin kolom yang sedang diperiksa menjadi LOW
digitalWrite(colPins[col], LOW);
for (int row = 0; row < ROWS; row++) {
// Periksa jika tombol di baris terhubung ke ground (LOW)
if (digitalRead(rowPins[row]) == LOW) {
key = keys[row][col];
delay(50); // Tambahkan penundaan untuk menghindari bounce
break;
}
}
// Set pin kolom menjadi HIGH kembali
digitalWrite(colPins[col], HIGH);
// Hentikan pemeriksaan jika tombol ditemukan
if (key != '\0') {
break;
}
}
return key;
}