// Pin kontrol digit
const int digit1Pin = 11;
const int digit2Pin = 10;
const int digit3Pin = 9;
const int digit4Pin = 8;

// Pin kontrol segmen (a, b, c, d, e, f, g, dp)
const int segmentPins[] = {1, 2, 3, 4, 5, 6, 7, 0};

// Definisi angka 0-9 dalam bentuk bit untuk display seven segment
const byte digits[] = {
  B11000000, // 0
  B11111001, // 1
  B10100100, // 2
  B10110000, // 3
  B10011001, // 4
  B10010010, // 5
  B10000010, // 6
  B11111000, // 7
  B10000000, // 8
  B10010000, // 9
};

void setup() {
  // Set pin-pin sebagai OUTPUT
  pinMode(digit1Pin, OUTPUT);
  pinMode(digit2Pin, OUTPUT);
  pinMode(digit3Pin, OUTPUT);
  pinMode(digit4Pin, OUTPUT);
  
  for (int i = 0; i < 8; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }
}

void loop() {
  for (int i = 0; i <= 9999; i++) {
    displayNumber(digit1Pin, i / 1000); // Ribuan
    delay(10); // Tunggu sebentar
    
    displayNumber(digit2Pin, (i / 100) % 10); // Ratusan
    delay(10); // Tunggu sebentar
    
    displayNumber(digit3Pin, (i / 10) % 10); // Puluhan
    delay(10); // Tunggu sebentar
    
    displayNumber(digit4Pin, i % 10); // Satuan
    delay(10); // Tunggu 1 detik
  }
}

void displayNumber(int digitPin, int number) {
  // Matikan semua digit
  digitalWrite(digit1Pin, LOW);
  digitalWrite(digit2Pin, LOW);
  digitalWrite(digit3Pin, LOW);
  digitalWrite(digit4Pin, LOW);

  // Tampilkan angka pada segmen-segmen yang sesuai
  for (int i = 0; i < 8; i++) {
    if (bitRead(digits[number], i)) {
      digitalWrite(segmentPins[i], HIGH);
    } else {
      digitalWrite(segmentPins[i], LOW);
    }
  }
  
  // Aktifkan digit yang sesuai
  digitalWrite(digitPin, HIGH);
}