// Definisi pin untuk LED, pushbutton, dan potensiometer
const int ledPins[] = {34, 35, 32, 33, 25, 26, 27, 14}; // Pin-pin untuk LED
const int buttonPin = 4;  // Pin untuk pushbutton
const int potPin = 22;     // Pin untuk potensiometer (input analog)

// Variabel untuk menyimpan status LED dan input dari potensiometer
int ledState = HIGH; // Awal kondisi semua LED hidup
int buttonState;
int previousButtonState = HIGH;
int potValue;

void setup() {
  // Inisialisasi pin LED sebagai output
  for (int i = 0; i < 8; i++) {
    pinMode(ledPins[i], OUTPUT);
    digitalWrite(ledPins[i], ledState); // Awal semua LED menyala
  }

  // Inisialisasi pushbutton sebagai input
  pinMode(buttonPin, INPUT_PULLUP); // Gunakan resistor pull-up internal
  
  // Inisialisasi pin potensiometer sebagai input
  pinMode(potPin, INPUT);
}

void loop() {
  // Membaca status pushbutton
  buttonState = digitalRead(buttonPin);

  // Cek apakah pushbutton ditekan (low aktif)
  if (buttonState == LOW && previousButtonState == HIGH) {
    // Jika tombol ditekan, matikan semua LED
    ledState = LOW;
    for (int i = 0; i < 8; i++) {
      digitalWrite(ledPins[i], ledState);
    }
  }
  
  // Simpan status pushbutton sebelumnya untuk debouncing
  previousButtonState = buttonState;

  // Membaca nilai potensiometer
  potValue = analogRead(potPin);
  
  // Hitung jumlah LED yang menyala berdasarkan nilai potensiometer
  int numberOfLedsToLight = map(potValue, 0, 4095, 0, 8);
  
  // Jika pushbutton tidak ditekan, kontrol nyala LED berdasarkan potensiometer
  if (buttonState == HIGH) {
    for (int i = 0; i < 8; i++) {
      if (i < numberOfLedsToLight) {
        digitalWrite(ledPins[i], HIGH); // Nyalakan LED sesuai jumlah
      } else {
        digitalWrite(ledPins[i], LOW); // Matikan LED lainnya
      }
    }
  }
}