// Pin definisi untuk segmen A hingga G dan DP
const int segA = 2;
const int segB = 3;
const int segC = 4;
const int segD = 5;
const int segE = 6;
const int segF = 7;
const int segG = 8;
const int segDP = 9; // Opsional, jika menggunakan titik desimal
const int buttonPin = 10; // Pin untuk push button
int digits[10][8] = {
{1, 1, 1, 1, 1, 1, 0, 0}, // 0
{0, 1, 1, 0, 0, 0, 0, 0}, // 1
{1, 1, 0, 1, 1, 0, 1, 0}, // 2
{1, 1, 1, 1, 0, 0, 1, 0}, // 3
{0, 1, 1, 0, 0, 1, 1, 0}, // 4
{1, 0, 1, 1, 0, 1, 1, 0}, // 5
{1, 0, 1, 1, 1, 1, 1, 0}, // 6
{1, 1, 1, 0, 0, 0, 0, 0}, // 7
{1, 1, 1, 1, 1, 1, 1, 0}, // 8
{1, 1, 1, 1, 0, 1, 1, 0} // 9
};
int currentNumber = 0; // Mulai dari angka kecil (0)
bool counting = false; // Apakah sedang menghitung atau tidak
bool reachedNine = false; // Untuk menandakan bahwa sudah mencapai 9
unsigned long lastUpdateTime = 0; // Waktu terakhir angka di-update
const unsigned long updateInterval = 1000; // Interval waktu (1 detik)
// Fungsi untuk menampilkan karakter di seven segment
void displayDigit(int digit) {
digitalWrite(segA, digits[digit][0]);
digitalWrite(segB, digits[digit][1]);
digitalWrite(segC, digits[digit][2]);
digitalWrite(segD, digits[digit][3]);
digitalWrite(segE, digits[digit][4]);
digitalWrite(segF, digits[digit][5]);
digitalWrite(segG, digits[digit][6]);
digitalWrite(segDP, digits[digit][7]); // Titik desimal (jika diperlukan)
}
void setup() {
// Set semua pin segmen sebagai OUTPUT
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
pinMode(segDP, OUTPUT); // Optional
// Set pin push button sebagai INPUT dengan pull-up resistor internal
pinMode(buttonPin, INPUT_PULLUP);
// Tampilkan angka awal (0)
displayDigit(currentNumber);
}
void loop() {
// Membaca status push button (LOW jika ditekan karena menggunakan pull-up)
if (digitalRead(buttonPin) == LOW) {
// Jika sudah mencapai 9, reset ke 0 dan mulai lagi
if (reachedNine) {
currentNumber = 0;
reachedNine = false;
counting = false; // Hentikan sementara sampai tombol ditekan lagi
displayDigit(currentNumber);
} else {
// Mulai counting jika belum mencapai 9
counting = true;
}
}
// Jika sedang menghitung, update display berdasarkan waktu
if (counting) {
unsigned long currentTime = millis();
// Hanya update angka jika sudah melewati interval waktu yang ditentukan
if (currentTime - lastUpdateTime >= updateInterval) {
lastUpdateTime = currentTime; // Reset waktu terakhir update
// Tampilkan angka saat ini
displayDigit(currentNumber);
// Tambahkan angka (berhenti ketika mencapai 9)
if (currentNumber < 9) {
currentNumber++;
} else {
// Jika sudah mencapai 9, stop counting dan tandai sudah mencapai 9
reachedNine = true;
counting = false;
}
}
}
}