
使用for迴圈控制8個LED燈同時亮滅閃爍的程式如下:
int LED[8]={15,16,17,18,19,21,22,23}; // LED接腳陣列
void setup() {
for(int i=0; i<=7; i++)
{
pinMode(LED[i],OUTPUT); // LED[0]~LED[7]為輸出腳
digitalWrite(LED[i], HIGH); // LED[0]~LED[7]全滅
}
}
void loop() {
for(int i=0; i<=7 ; i++)
{
digitalWrite(LED[i], LOW); // LED[0]~LED[7]全亮
}
delay(500);
for(int i=0; i<=7 ; i++)
{
digitalWrite(LED[i], HIGH); // LED[0]~LED[7]全滅
}
delay(500);
}
若使用while迴圈改寫,常見的方法有下列幾種:
第1種方法:while()
int LED[8]={15,16,17,18,19,21,22,23}; // LED接腳陣列
void setup() {
// 方法1
int i = 0; // 初始值
while (i <= 7) // 只要滿足while()的條件,則做{.....}內的程式
{
pinMode(LED[i], OUTPUT); // LED[0]~LED[7]為輸出腳
digitalWrite(LED[i], HIGH); // LED[0]~LED[7]全滅
i++; // 做完一次加1
}
}
void loop() {
// 方法1
int i = 0; // 初始值
while (i <= 7) // 只要滿足while()的條件,則做{.....}內的程式
{
digitalWrite(LED[i], LOW); // LED[0]~LED[7]全亮
i++; // 做完一次加1
}
delay(500);
i = 0; // 初始值
while (i <= 7) // 只要滿足while()的條件,則做{.....}內的程式
{
digitalWrite(LED[i], HIGH); // LED[0]~LED[7]全滅
i++; // 做完一次加1
}
delay(500);
}
第2種方法:無窮迴圈 + 條件判斷 while(1)…break
int LED[8]={15,16,17,18,19,21,22,23}; // LED接腳陣列
void setup() {
// 方法2
int i = 0; // 初始值
while (1) // 永遠執行{.....}內的程式
{
pinMode(LED[i], OUTPUT); // LED[0]~LED[7]為輸出腳
digitalWrite(LED[i], HIGH); // LED[0]~LED[7]全滅
i++; // 做完一次加1
if(i > 7) break; // 只要i>7,離開while(1)無窮迴圈
}
}
void loop() {
// 方法2
int i = 0; // 初始值
while (1) // 永遠執行{.....}內的程式
{
digitalWrite(LED[i], LOW); // LED[0]~LED[7]全亮
i++; // 做完一次加1
if(i > 7) break; // 只要i>7,離開while(1)無窮迴圈
}
delay(500);
i = 0; // 初始值
while (1) // 永遠執行{.....}內的程式
{
digitalWrite(LED[i], HIGH); // LED[0]~LED[7]全滅
i++; // 做完一次加1
if(i > 7) break; // 只要i>7,離開while(1)無窮迴圈
}
delay(500);
}
第3種方法:do...while迴圈
do...while 迴圈會先執行迴圈內的程式碼,然後再檢查條件。即使條件一開始就不成立,迴圈內的程式碼也會至少執行一次。
int LED[8]={15,16,17,18,19,21,22,23}; // LED接腳陣列
void setup() {
// 方法3
int i = 0; // 初始值
do // 先做一次{.....}的程式,再判斷while()條件是否成立
{
pinMode(LED[i], OUTPUT); // LED[0]~LED[7]為輸出腳
digitalWrite(LED[i], HIGH); // LED[0]~LED[7]全滅
i++; // 做完一次加1
} while(i <= 7); // 若while()條件成立,則繼續執行{.....}的程式,否則就離開
}
void loop() {
// 方法3
int i = 0; // 初始值
do // 先做一次{.....}的程式,再判斷while()條件是否成立
{
digitalWrite(LED[i], LOW); // LED[0]~LED[7]全亮
i++; // 做完一次加1
} while(i <= 7); // 若while()條件成立,則繼續執行{.....}的程式,否則就離開
delay(500);
i = 0; // 初始值
do // 先做一次{.....}的程式,再判斷while()條件是否成立
{
digitalWrite(LED[i], HIGH); // LED[0]~LED[7]全滅
i++; // 做完一次加1
} while(i <= 7); // 若while()條件成立,則繼續執行{.....}的程式,否則就離開
delay(500);
}
作業練習:參考2025-09-25作業,使用while、while(1)…break、do…while()這三種語法改寫原for迴圈。
- 開機後,全亮全滅快閃2次。(方法1)
- 循環顯示下列狀態:
- 單個LED,左去,右回。(方法2)
- 單個LED,右去,左回。(方法2)
- 全亮全滅快閃3次。(方法1)
- 2個LED連在一起,左去,右回。(方法3)
- 2個LED連在一起,右去,左回。(方法3)
- 全滅。(方法1)
- 在Wokwi網站上進行模擬,並完成實體接線。