#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Keypad.h>
// Konfigurasi layar OLED
#define SSD1306_I2C_ADDRESS (21, 22)
#define SCREEN_WIDTH 128 // Lebar layar OLED
#define SCREEN_HEIGHT 64 // Tinggi layar OLED
#define OLED_RESET -1 // Pin reset (gunakan -1 jika tidak ada reset)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Konfigurasi Keypad
const byte ROWS = 4; // Jumlah baris pada keypad
const byte COLS = 4; // Jumlah kolom pada keypad
// Definisi tombol pada keypad 4x4
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
// Pin baris dan kolom keypad
byte rowPins[ROWS] = {5, 17, 16, 4}; // Hubungkan ke pin baris
byte colPins[COLS] = {12, 14, 27, 26}; // Hubungkan ke pin kolom
// Inisialisasi keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
// Inisialisasi serial monitor
Serial.begin(9600);
// Inisialisasi layar OLED
if (!display.begin(SSD1306_I2C_ADDRESS, 0x3C)) { // Alamat I2C biasanya 0x3C
Serial.println(F("Gagal menginisialisasi OLED"));
while (true);
}
display.clearDisplay(); // Bersihkan layar
display.setTextSize(1); // Ukuran teks
display.setTextColor(SSD1306_WHITE); // Warna teks
display.setCursor(0, 0);
display.println(F("Keypad Input:"));
display.display();
}
void loop() {
// Membaca tombol dari keypad
char key = keypad.getKey();
if (key) { // Jika ada tombol yang ditekan
Serial.print("Tombol ditekan: ");
Serial.println(key);
// Tampilkan tombol yang ditekan pada OLED
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.println(F("Keypad Input:"));
display.setTextSize(2);
display.setCursor(0, 20);
display.print("Key: ");
display.print(key);
display.display();
}
delay(100); // Debounce sederhana
}