電路接線圖

陣列:是一種用來儲存多個相同類型資料的資料結構。
資料類型 陣列名稱[內容數量];
int LED[8] = {15, 16, 17, 18, 19, 21, 22, 23}; // 宣告一個整數陣列,名稱為LED,內容物共8筆
// 陣列的索引值從0開始編號,透過索引值可找到相對應的內容
// LED[0] --> 15;
// LED[1] --> 16;
// LED[2] --> 17;
// LED[3] --> 18;
// LED[4] --> 19;
// LED[5] --> 21;
// LED[6] --> 22;
// LED[7] --> 23;
// 宣告輸出腳
for (int i = 0; i <= 7; i++)
{
pinMode(LED[i], OUTPUT); // 宣告LED[0]~LED[7]其對應的接腳為輸出腳
}
// 全滅
for (int i = 0; i <= 7; i++)
{
digitalWrite(LED[i], 1); // 設定LED[0]~LED[7]其對應的接腳為HIGH
}
// 全亮
for (int i = 0; i <= 7; i++)
{
digitalWrite(LED[i], 0); // 設定LED[0]~LED[7]其對應的接腳為LOW
}
// 由右到左,流水燈
for (int i = 0; i <= 7; i++)
{
digitalWrite(LED[i], 0);
delay(500);
digitalWrite(LED[i], 1);
delay(20);
}
// 由左到右,流水燈
for (int i = 7; i >= 0; i--)
{
digitalWrite(LED[i], 0);
delay(500);
digitalWrite(LED[i], 1);
delay(20);
}
副程式:用來將代碼封裝成一個可重複使用的單位,有助於提高代碼的可讀性和維護性。
// 全滅
void all_off() // 不帶參數
{
for (int i = 0; i <= 7; i++)
{
digitalWrite(LED[i], 1);
}
}
// 全亮
void all_on() // 不帶參數
{
for (int i = 0; i <= 7; i++)
{
digitalWrite(LED[i], 0);
}
}
// 從 x 亮到 y
void led_on(int x, int y) // 帶參數 x, y
{
for (int i = x; i <= y; i++)
{
digitalWrite(LED[i], 0);
}
}
// 由右到左,流水燈
void right_to_left(int t1, int t2) // 帶參數 t1, t2
{
for (int i = 0; i <= 7; i++)
{
digitalWrite(LED[i], 0);
delay(t1);
digitalWrite(LED[i], 1);
delay(t2);
}
}
// 由左到右,流水燈
void left_to_right(int t1, int t2) // 帶參數 t1, t2
{
for (int i = 7; i >= 0; i--)
{
digitalWrite(LED[i], 0);
delay(t1);
digitalWrite(LED[i], 1);
delay(t2);
}
}
// 全亮、全滅各一次
void all_blink(int t1, int t2) // 帶參數 t1, t2
{
all_on();
delay(t1);
all_off();
delay(t2);
}
// 右慢去,左快回
void right_left_right(){
right_to_left(800, 50);
left_to_right(100, 50);
}
// 左快去,右慢回
void left_right_left(){
left_to_right(100, 50);
right_to_left(800, 50);
}
參考範例:
// 廣域變數(到處可用)
int LED[8] = {15, 16, 17, 18, 19, 21, 22, 23}; // 宣告一個整數陣列,名稱為LED,內容物共8筆
void setup() {
// 宣告輸出腳
for(int i=0; i<=7; i++)
{
pinMode(LED[i], OUTPUT); // 宣告LED[0]~LED[7]其對應的接腳為輸出腳
}
all_off(); //全滅
delay(1000);
//all_on(); //全亮
led_on(2,6); //LED[2]~LED[6] 亮
delay(2000);
all_off(); //全滅
delay(1000);
}
void loop() {
all_on(); //全亮
all_off(); //全滅
right_left_right(); // 右慢去,左快回
left_right_left(); // 左快去,右慢回
}
// 全滅
void all_off()
{
for(int i=0; i<=7; i++)
{
digitalWrite(LED[i], 1); // 令LED[0]~LED[7]其對應的接腳為HIGH
}
}
// 全亮
void all_on()
{
for(int i=0; i<=7; i++)
{
digitalWrite(LED[i], 0); // 令LED[0]~LED[7]其對應的接腳為LOW
}
}
// 亮某幾個燈
void led_on(int x, int y) // 帶參數
{
for(int i=x; i<=y; i++)
{
digitalWrite(LED[i], 0); // 令LED[0]~LED[7]其對應的接腳為LOW
Serial.print(x);
Serial.print(",");
Serial.println(y);
}
}
// 由右到左,流水燈
void right_to_left(int t1, int t2) // 帶參數 t1, t2
{
for (int i = 0; i <= 7; i++)
{
digitalWrite(LED[i], 0);
delay(t1);
digitalWrite(LED[i], 1);
delay(t2);
}
}
// 由左到右,流水燈
void left_to_right(int t1, int t2) // 帶參數 t1, t2
{
for (int i = 7; i >= 0; i--)
{
digitalWrite(LED[i], 0);
delay(t1);
digitalWrite(LED[i], 1);
delay(t2);
}
}
// 右慢去,左快回
void right_left_right(){
right_to_left(800, 50);
left_to_right(100, 50);
}
// 左快去,右慢回
void left_right_left(){
left_to_right(100, 50);
right_to_left(800, 50);
}
作業練習:
- 開機後,全亮全滅快閃2次。
- 循環顯示下列狀態:
- 單個LED,左去,右回。
- 單個LED,右去,左回。
- 全亮全滅快閃3次。
- 2個LED連在一起,左去,右回。
- 2個LED連在一起,右去,左回。
- 全滅。
- 在Wokwi網站上進行模擬,並完成實體接線。