در این درس یاد میگیرید چطور چند LED را همزمان یا بهصورت متوالی (افکت چراغ روان، معروف به Knight Rider) کنترل کنید — تمرینی عالی برای کار با آرایهها و حلقهها در C++.
تعریف چند پایه با یک آرایه
بهجای تعریف تکتک متغیرها برای هر LED، میتوانیم یک آرایه از شماره پایهها بسازیم و با حلقهٔ for روی آنها کار کنیم.
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 را بهآرامی محو و ظاهر کنید تا افکتی نرمتر بسازید.
برای اجرای دقیق کد بالا (با پایههای GPIO13، ۱۲، ۱۴، ۲۷ و ۲۶ و الگوی آرایه)، یک پروژهٔ خالی Arduino/ESP32 در Wokwi بسازید.
ساخت پروژهٔ خالی Arduino/ESP32 در Wokwi ↗کارگاه عملی: افکت «چراغ روان» بالا را طوری تغییر دهید که سرعت آن به یک پتانسیومتر (با ADC، درس ۶) وابسته باشد؛ هرچه پتانسیومتر بیشتر بچرخد، سرعت چراغها بیشتر شود.