// Khai báo các chân GPIO cho 12 LED
const int ledPins[] = {0, 2, 4, 5, 15, 16, 17, 18, 19, 25, 26, 33};

void setup() {
  // Cấu hình các chân LED là OUTPUT
  for (int i = 0; i < 12; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}

void loop() {
  // Hiệu ứng 1: LED sáng lên theo thứ tự từ ngoài vào trong (hình trái tim)
  heartEffect1();
  delay(1000);

  // Hiệu ứng 2: LED sáng lên theo thứ tự từ trong ra ngoài
  heartEffect2();
  delay(1000);

  // Hiệu ứng 3: LED sáng theo hình trái tim đầy đủ
  heartEffect3();
  delay(1000);

  // Hiệu ứng 4: LED sáng theo kiểu chớp tắt
  heartEffect4();
  delay(1000);

  // Hiệu ứng 5: LED sáng lên theo kiểu wave (sóng)
  heartEffect5();
  delay(1000);
}

// Hiệu ứng 1: LED sáng từ ngoài vào trong (hình trái tim)
void heartEffect1() {
  for (int i = 0; i < 12; i++) {
    digitalWrite(ledPins[i], HIGH);
    delay(100); // Delay để tạo hiệu ứng sáng từ ngoài vào trong
  }
  for (int i = 0; i < 12; i++) {
    digitalWrite(ledPins[i], LOW);
  }
}

// Hiệu ứng 2: LED sáng từ trong ra ngoài (hình trái tim)
void heartEffect2() {
  for (int i = 11; i >= 0; i--) {
    digitalWrite(ledPins[i], HIGH);
    delay(100); // Delay để tạo hiệu ứng sáng từ trong ra ngoài
  }
  for (int i = 0; i < 12; i++) {
    digitalWrite(ledPins[i], LOW);
  }
}

// Hiệu ứng 3: LED sáng lên tất cả (hình trái tim đầy đủ)
void heartEffect3() {
  for (int i = 0; i < 12; i++) {
    digitalWrite(ledPins[i], HIGH);
  }
  delay(500); // Để LED sáng trong một khoảng thời gian
  for (int i = 0; i < 12; i++) {
    digitalWrite(ledPins[i], LOW);
  }
}

// Hiệu ứng 4: LED sáng chớp tắt
void heartEffect4() {
  for (int i = 0; i < 12; i++) {
    digitalWrite(ledPins[i], HIGH);
  }
  delay(100); // Sáng tất cả LED trong 100ms
  for (int i = 0; i < 12; i++) {
    digitalWrite(ledPins[i], LOW);
  }
  delay(100); // Tắt tất cả LED trong 100ms
}

// Hiệu ứng 5: LED sáng lên theo kiểu sóng
void heartEffect5() {
  for (int i = 0; i < 12; i++) {
    digitalWrite(ledPins[i], HIGH);
    delay(100); // Delay để tạo hiệu ứng sóng
    digitalWrite(ledPins[i], LOW);
  }
}