#include <Keypad.h>
// Pin shift register 74HC595
#define CLOCK 2
#define LATCH 3
#define DATA 4
#define BUZZER 13 // Tambahkan pin untuk buzzer
// Data untuk seven-segment common cathode
const byte num[] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111, // 9
0b01110111, // A
0b01111100, // b
0b00111001, // C
0b01011110, // d
0b01111001, // E
0b01110001 // F
};
// Konfigurasi Keypad 4x4
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {5, 6, 7, 8};
byte colPins[COLS] = {9, 10, 11, 12};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
pinMode(CLOCK, OUTPUT);
pinMode(LATCH, OUTPUT);
pinMode(DATA, OUTPUT);
pinMode(BUZZER, OUTPUT); // Atur pin buzzer sebagai output
}
void loop() {
char key = keypad.getKey(); // Baca input keypad
if (key) {
int index = -1;
if (key >= '0' && key <= '9') {
index = key - '0'; // Konversi karakter angka 0-9
} else if (key >= 'A' && key <= 'F') {
index = key - 'A' + 10; // Konversi huruf A-F
}
// Bunyikan buzzer saat tombol ditekan
tone(BUZZER, 1000, 200); // Frekuensi 1000Hz, durasi 200ms
if (index != -1) {
displayCharacter(index);
}
}
}
// Fungsi untuk menampilkan karakter di seven-segment
void displayCharacter(int num) {
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, MSBFIRST, ::num[num]); // Kirim data ke shift register
digitalWrite(LATCH, HIGH);
}