متوسط⏱ 14 دقیقه مطالعه

در این درس یاد می‌گیرید چطور چند LED را هم‌زمان یا به‌صورت متوالی (افکت چراغ روان، معروف به Knight Rider) کنترل کنید — تمرینی عالی برای کار با آرایه‌ها و حلقه‌ها در C++‎.

اتصال چند LED به چند پایهٔ GPIO

تعریف چند پایه با یک آرایه

به‌جای تعریف تک‌تک متغیرها برای هر LED، می‌توانیم یک آرایه از شماره پایه‌ها بسازیم و با حلقهٔ for روی آن‌ها کار کنیم.

CPP
const int LED_PINS[] = {13, 12, 14, 27, 26};
const int NUM_LEDS = 5;

void allOff() {
  for (int i = 0; i < NUM_LEDS; i++) {
    digitalWrite(LED_PINS[i], LOW);
  }
}

void setup() {
  for (int i = 0; i < NUM_LEDS; i++) {
    pinMode(LED_PINS[i], OUTPUT);
  }
}

void loop() {
  for (int i = 0; i < NUM_LEDS; i++) {
    allOff();
    digitalWrite(LED_PINS[i], HIGH);
    delay(100);
  }
  for (int i = NUM_LEDS - 1; i >= 0; i--) {
    allOff();
    digitalWrite(LED_PINS[i], HIGH);
    delay(100);
  }
}
💡 نکته

استفاده از یک آرایهٔ ثابت (const int[]) به‌جای تعریف پنج متغیر جداگانه، کد را بسیار تمیزتر و قابل‌توسعه‌تر می‌کند؛ برای افزودن LED ششم، فقط کافی است یک عدد به آرایه اضافه کنید و NUM_LEDS را به‌روز کنید.

افزودن PWM برای افکت محوشدگی

با ترکیب این ایده با PWM (درس ۵)، می‌توانید به‌جای روشن/خاموش ناگهانی، هر LED را به‌آرامی محو و ظاهر کنید تا افکتی نرم‌تر بسازید.

شبیه‌سازی زندهٔ کنترل چند LED مستقل (به‌سبک چراغ‌راهنمایی) — پایه‌های متفاوت از این درس دارد، اما همان اصل کنترل چند LED با digitalWrite را نشان می‌دهد باز کردن در Wokwi ↗
در حال بارگذاری شبیه‌ساز… (ممکن است چند ثانیه طول بکشد)

این یک شبیه‌سازی واقعی و قابل اجراست؛ روی دکمه پخش (▶) در Wokwi بزنید تا کد روی برد مجازی ESP32 اجرا شود. اگر جعبهٔ بالا بیش از حد سیاه/خالی ماند، صفحه را رفرش کنید یا از دکمهٔ «باز کردن در Wokwi» بالا استفاده کنید.

🧩

برای اجرای دقیق کد بالا (با پایه‌های GPIO13، ۱۲، ۱۴، ۲۷ و ۲۶ و الگوی آرایه)، یک پروژهٔ خالی Arduino/ESP32 در Wokwi بسازید.

ساخت پروژهٔ خالی Arduino/ESP32 در Wokwi ↗
🛠️ کارگاه عملی

کارگاه عملی: افکت «چراغ روان» بالا را طوری تغییر دهید که سرعت آن به یک پتانسیومتر (با ADC، درس ۶) وابسته باشد؛ هرچه پتانسیومتر بیشتر بچرخد، سرعت چراغ‌ها بیشتر شود.

❓ برای نگه‌داری شماره پایهٔ چند LED در C++‎، از کدام ساختار داده استفاده شد؟
طراحی و توسعه: امین شیخ نجدیglcd.ir | نسخهٔ افزونه: 1.21.0