#include <Keypad.h>
// Define the pins for the 7-segment displays
const int segmentPins[] = {2, 3, 4, 5, 6, 7, 8, 1}; // segmentPins[0], segmentPins[1], segmentPins[2], segmentPins[3], segmentPins[4], segmentPins[5], segmentPins[6], dp
const int digitPins[] = {9, 10, 11}; // Common pins for each digit
// Define the keypad pins and keys
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Four columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {12, 13, A0, A1}; // Connect to the row pinouts of the keypad
byte colPins[COLS] = {A2, A3, A4, A5}; // Connect to the column pinouts of the keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
int number = 0; // To store the entered number
int storedNumbers[5] = {0}; // Array to store up to 5 numbers
int currentIndex = 0; // Current index for stored numbers
int ratusan;
int puluhan;
int satuan;
void setup() {
for (int i = 0; i < 8; i++) { // Initialize 8 segment pins
pinMode(segmentPins[i], OUTPUT);
}
for (int i = 0; i < 3; i++) {
pinMode(digitPins[i], OUTPUT);
// digitalWrite(digitPins[i], LOW); // Turn off the digit
}
Serial.begin(9600);
}
void loop() {
char key = keypad.getKey();
if (key) {
if (key >= '0' && key <= '9') {
number = (number * 10) + (key - '0');
if (number > 999) {
number = number % 1000; // Keep the number within 3 digits
}
Serial.println(number);
} else if (key == 'A') {
if (currentIndex < 5) {
storedNumbers[currentIndex] = number; // Store the current number
currentIndex++;
Serial.println("Data stored.");
} else {
Serial.println("Storage full.");
}
} else if (key == 'B') {
for (int i = 0; i < 5; i++) {
displayNumber(storedNumbers[i], 3000); // Display each number for 3 seconds
}
} else if (key == 'C') {
number = 0; // Clear the number display
Serial.println("Number cleared.");
} else if (key == 'D') {
number = 0; // Reset the number
currentIndex = 0; // Reset the stored numbers
for (int i = 0; i < 5; i++) {
storedNumbers[i] = 0;
}
Serial.println("Reset");
}
}
displayNumber(number, 1); // Update the display
}
void clear() {
for (int i = 0; i < 8; i++) {
digitalWrite(segmentPins[i], HIGH);
}
}
void displayzero() {
digitalWrite(segmentPins[0], LOW);
digitalWrite(segmentPins[1], LOW);
digitalWrite(segmentPins[2], LOW);
digitalWrite(segmentPins[3], LOW);
digitalWrite(segmentPins[4], LOW);
digitalWrite(segmentPins[5], LOW);
digitalWrite(segmentPins[6], HIGH);
digitalWrite(segmentPins[7], HIGH);
}
void angka(byte i) {
switch(i) {
case 0:
digitalWrite(segmentPins[0], LOW);
digitalWrite(segmentPins[1], LOW);
digitalWrite(segmentPins[2], LOW);
digitalWrite(segmentPins[3], LOW);
digitalWrite(segmentPins[4], LOW);
digitalWrite(segmentPins[5], LOW);
digitalWrite(segmentPins[6], HIGH);
digitalWrite(segmentPins[7], HIGH);
break;
case 1:
digitalWrite(segmentPins[0], HIGH);
digitalWrite(segmentPins[1], LOW);
digitalWrite(segmentPins[2], LOW);
digitalWrite(segmentPins[3], HIGH);
digitalWrite(segmentPins[4], HIGH);
digitalWrite(segmentPins[5], HIGH);
digitalWrite(segmentPins[6], HIGH);
digitalWrite(segmentPins[7], HIGH);
break;
case 2:
digitalWrite(segmentPins[0], LOW);
digitalWrite(segmentPins[1], LOW);
digitalWrite(segmentPins[2], HIGH);
digitalWrite(segmentPins[3], LOW);
digitalWrite(segmentPins[4], LOW);
digitalWrite(segmentPins[5], HIGH);
digitalWrite(segmentPins[6], LOW);
digitalWrite(segmentPins[7], HIGH);
break;
case 3:
digitalWrite(segmentPins[0], LOW);
digitalWrite(segmentPins[1], LOW);
digitalWrite(segmentPins[2], LOW);
digitalWrite(segmentPins[3], LOW);
digitalWrite(segmentPins[4], HIGH);
digitalWrite(segmentPins[5], HIGH);
digitalWrite(segmentPins[6], LOW);
digitalWrite(segmentPins[7], HIGH);
break;
case 4:
digitalWrite(segmentPins[0], HIGH);
digitalWrite(segmentPins[1], LOW);
digitalWrite(segmentPins[2], LOW);
digitalWrite(segmentPins[3], HIGH);
digitalWrite(segmentPins[4], HIGH);
digitalWrite(segmentPins[5], LOW);
digitalWrite(segmentPins[6], LOW);
digitalWrite(segmentPins[7], HIGH);
break;
case 5:
digitalWrite(segmentPins[0], LOW);
digitalWrite(segmentPins[1], HIGH);
digitalWrite(segmentPins[2], LOW);
digitalWrite(segmentPins[3], LOW);
digitalWrite(segmentPins[4], HIGH);
digitalWrite(segmentPins[5], LOW);
digitalWrite(segmentPins[6], LOW);
digitalWrite(segmentPins[7], HIGH);
break;
case 6:
digitalWrite(segmentPins[0], LOW);
digitalWrite(segmentPins[1], HIGH);
digitalWrite(segmentPins[2], LOW);
digitalWrite(segmentPins[3], LOW);
digitalWrite(segmentPins[4], LOW);
digitalWrite(segmentPins[5], LOW);
digitalWrite(segmentPins[6], LOW);
digitalWrite(segmentPins[7], HIGH);
break;
case 7:
digitalWrite(segmentPins[0], LOW);
digitalWrite(segmentPins[1], LOW);
digitalWrite(segmentPins[2], LOW);
digitalWrite(segmentPins[3], HIGH);
digitalWrite(segmentPins[4], HIGH);
digitalWrite(segmentPins[5], HIGH);
digitalWrite(segmentPins[6], HIGH);
digitalWrite(segmentPins[7], HIGH);
break;
case 8:
digitalWrite(segmentPins[0], LOW);
digitalWrite(segmentPins[1], LOW);
digitalWrite(segmentPins[2], LOW);
digitalWrite(segmentPins[3], LOW);
digitalWrite(segmentPins[4], LOW);
digitalWrite(segmentPins[5], LOW);
digitalWrite(segmentPins[6], LOW);
digitalWrite(segmentPins[7], HIGH);
break;
case 9:
digitalWrite(segmentPins[0], LOW);
digitalWrite(segmentPins[1], LOW);
digitalWrite(segmentPins[2], LOW);
digitalWrite(segmentPins[3], LOW);
digitalWrite(segmentPins[4], HIGH);
digitalWrite(segmentPins[5], LOW);
digitalWrite(segmentPins[6], LOW);
digitalWrite(segmentPins[7], HIGH);
break;
}
}
void displayNumber(int num, int duration) {
int ratusan = num / 100;
int puluhan = (num % 100) / 10;
int satuan = num % 10;
unsigned long startTime = millis();
while (millis() - startTime < duration) {
if (num >= 100) {
clear();
digitalWrite(digitPins[0], HIGH);
digitalWrite(digitPins[1], LOW);
digitalWrite(digitPins[2], LOW);
angka(ratusan);
delay(5);
clear();
digitalWrite(digitPins[0], LOW);
digitalWrite(digitPins[1], HIGH);
digitalWrite(digitPins[2], LOW);
angka(puluhan);
delay(5);
clear();
digitalWrite(digitPins[0], LOW);
digitalWrite(digitPins[1], LOW);
digitalWrite(digitPins[2], HIGH);
angka(satuan);
delay(5);
}
else if (num >= 10) {
clear();
digitalWrite(digitPins[0], HIGH);
digitalWrite(digitPins[1], LOW);
digitalWrite(digitPins[2], LOW);
displayzero();
delay(5);
clear();
digitalWrite(digitPins[0], LOW);
digitalWrite(digitPins[1], HIGH);
digitalWrite(digitPins[2], LOW);
angka(puluhan);
delay(5);
clear();
digitalWrite(digitPins[0], LOW);
digitalWrite(digitPins[1], LOW);
digitalWrite(digitPins[2], HIGH);
angka(satuan);
delay(5);
}
else {
clear();
digitalWrite(digitPins[0], HIGH);
digitalWrite(digitPins[1], LOW);
digitalWrite(digitPins[2], LOW);
displayzero();
delay(5);
clear();
digitalWrite(digitPins[0], LOW);
digitalWrite(digitPins[1], HIGH);
digitalWrite(digitPins[2], LOW);
displayzero();
delay(5);
clear();
digitalWrite(digitPins[0], LOW);
digitalWrite(digitPins[1], LOW);
digitalWrite(digitPins[2], HIGH);
angka(satuan);
delay(5);
}
}
}