#include <Keypad.h>
const byte ROWS = 4; //jumlah baris pada keypad
const byte COLS = 4; //jumlah kolom pada keypad
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'}, // Keypad 4x4 layout
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {A4, A3, A2, A1}; //pin yang terhubung dengan baris keypad
byte colPins[COLS] = {10, 11, 12, 13}; //pin yang terhubung dengan kolom keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Pins untuk seven segment display
const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2}; // Perhatikan tanda kurung kurawal yang tidak perlu
const int numSegments = 7; // Harusnya 8 karena jumlah pin seven segment adalah 8
void setup() {
for (int i = 0; i < numSegments; i++) {
pinMode(segmentPins[i], OUTPUT);
digitalWrite(segmentPins[i], LOW);
}
}
void loop() {
char key = keypad.getKey();
if (key != NO_KEY) {
displayCharacter(key);
}
}
void displayCharacter(char key) {
switch (key) {
case '0':
displaySegments(true, true, true, true, true, true, false);
break;
case '1':
displaySegments(false, true, true, false, false, false, false);
break;
case '2':
displaySegments(true, true, false, true, true, false, true);
break;
case '3':
displaySegments(true, true, true, true, false, false, true);
break;
case '4':
displaySegments(false, true, true, false, false, true, true);
break;
case '5':
displaySegments(true, false, true, true, false, true, true);
break;
case '6':
displaySegments(true, true, true, false, false, false, false);
break;
case '7':
displaySegments(true, false, true, true, true, true, true);
break;
case '8':
displaySegments(true, true, true, true, true, true, true);
break;
case '9':
displaySegments(true, true, true, true, false, true, true);
break;
case 'A':
displaySegments(true, true, true, false, true, true, true);
break;
case 'B':
displaySegments(false, false, true, true, true, true, true);
break;
case 'C':
displaySegments(true, false, false, true, true, true, false);
break;
case 'D':
displaySegments(false, true, true, true, true, false, true);
break;
default:
turnOffSegments();
break;
}
}
void displaySegments(bool a, bool b, bool c, bool d, bool e, bool f, bool g) {
bool segments[] = {a, b, c, d, e, f, g};
for (int i = 0; i < numSegments; i++) {
digitalWrite(segmentPins[i], segments[i] ? HIGH : LOW);
}
}
void turnOffSegments() {
for (int i = 0; i < numSegments; i++) {
digitalWrite(segmentPins[i], LOW);
}
}