// Khai báo các chân kết nối LED
const int ledPins[] = {2, 4, 5, 18, 19, 21, 22, 23, 25, 26, 27, 32};
const int numLeds = 12;

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

void loop() {
  heartBeatEffect();
  delay(1000);
  
  chasingEffect();
  delay(1000);

  blinkingEffect();
  delay(1000);

  waveEffect();
  delay(1000);

  randomEffect();
  delay(1000);
}

// Hiệu ứng 1: Trái tim đập
void heartBeatEffect() {
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < numLeds; j++) {
      digitalWrite(ledPins[j], HIGH);
    }
    delay(200);
    for (int j = 0; j < numLeds; j++) {
      digitalWrite(ledPins[j], LOW);
    }
    delay(200);
  }
}

// Hiệu ứng 2: LED chạy đuổi
void chasingEffect() {
  for (int i = 0; i < numLeds; i++) {
    digitalWrite(ledPins[i], HIGH);
    delay(100);
    digitalWrite(ledPins[i], LOW);
  }
}

// Hiệu ứng 3: Nhấp nháy toàn bộ
void blinkingEffect() {
  for (int i = 0; i < 3; i++) {
    for (int j = 0; j < numLeds; j++) {
      digitalWrite(ledPins[j], HIGH);
    }
    delay(500);
    for (int j = 0; j < numLeds; j++) {
      digitalWrite(ledPins[j], LOW);
    }
    delay(500);
  }
}

// Hiệu ứng 4: Sóng lan tỏa
void waveEffect() {
  for (int i = 0; i < numLeds; i++) {
    digitalWrite(ledPins[i], HIGH);
    delay(100);
    digitalWrite(ledPins[i], LOW);
  }
  for (int i = numLeds - 1; i >= 0; i--) {
    digitalWrite(ledPins[i], HIGH);
    delay(100);
    digitalWrite(ledPins[i], LOW);
  }
}

// Hiệu ứng 5: Ngẫu nhiên LED sáng
void randomEffect() {
  for (int i = 0; i < 10; i++) {
    int randLed = random(0, numLeds);
    digitalWrite(ledPins[randLed], HIGH);
    delay(200);
    digitalWrite(ledPins[randLed], LOW);
  }
}
$abcdeabcde151015202530354045505560fghijfghij