// Tentukan pin GPIO untuk 8 lampu LED
const int ledPins[] = {26, 27, 14, 12, 21, 19, 18, 5};
const int numLeds = 8;

void setup() {
  Serial.begin(115200);
  // Set semua pin LED sebagai output
  for (int i = 0; i < numLeds; i++)
  {
    pinMode(ledPins[i], OUTPUT);
  }
}

void loop() {
  Effect1();
  Effect2();
}

void Effect1() {
  // 1. Gerakan dari kiri ke kanan
  for (int i = 0; i < numLeds; i++) {
    digitalWrite(ledPins[i], HIGH);
    delay(100);
    digitalWrite(ledPins[i], LOW);
  }
  delay(500); // Tahan 500ms
  Serial.println("Effect1 : kiri ke kanan berhasil");

  // 2. Gerakan dari kanan ke kiri
  for (int i = numLeds - 1; i >= 0; i--) {
    digitalWrite(ledPins[i], HIGH);
    delay(100);
    digitalWrite(ledPins[i], LOW);
  }
  delay(500); // Tahan 500ms
  Serial.println("Effect1 : kanan ke kiri berhasil");

  // 1. Hidupkan dari tengah ke luar
  for (int i = numLeds / 2 - 1; i >= 0; i--) {
    digitalWrite(ledPins[i], HIGH);  // Bagian kiri (tengah ke luar)
    digitalWrite(ledPins[numLeds - 1 - i], HIGH); // Bagian kanan (tengah ke luar)
    delay(200);
  }
  delay(500); // Tahan 500ms
  Serial.println("Effect1 : hidup dari tengah ke luar berhasil");

  // 2. matikan dari luar ke dalam (dari ujung ke tengah)
  for (int i = 0; i < numLeds / 2; i++) {
    digitalWrite(ledPins[i], LOW);  // Bagian kiri (bawah)
    digitalWrite(ledPins[numLeds - 1 - i], LOW); // Bagian kanan (atas)
    delay(200);
  }
  delay(500); // Tahan 500ms sebelum memulai lagi
  Serial.println("Effect1 : mati dari luar ke tengah berhasil");
}

void Effect2() {
  // Semua lampu menyala bersamaan
  for (int i = 0; i < numLeds; i++) {
    digitalWrite(ledPins[i], HIGH);
  }
  delay(1000); // Tahan selama 1000ms

  // Semua lampu mati bersamaan
  for (int i = 0; i < numLeds; i++) {
    digitalWrite(ledPins[i], LOW);
  }
  delay(200); // Tahan 200ms

  // Lampu menyala lagi
  for (int i = 0; i < numLeds; i++) {
    digitalWrite(ledPins[i], HIGH);
  }
  delay(100); // Tahan selama 100ms

  // Lampu mati lagi
  for (int i = 0; i < numLeds; i++) {
    digitalWrite(ledPins[i], LOW);
  }
  delay(500); // Tahan 500ms sebelum mengulangi efek lain
  Serial.println("Effect2: berhasil");
}