int count = 0; // 宣告變數,用來計算按鈕次數
const byte LED[] = {4,0,2,15} ,input = 36;
//const byte input = 36; // LED 接於 GPIO 4;按鈕接於 GPIO 36
//int state = 0; // LED 的狀態變數
void setup() {
pinMode(input, INPUT);
for(int i=0;i<=3;i++){
pinMode(LED[i], OUTPUT);
}
}
void loop() {
if (digitalRead(input) == false) { // 如果偵測到按鈕低電位,代表按鈕按下
delay(20);
if (digitalRead(input) == false) { // 再次判斷按鈕按下
while (digitalRead(input) == false); // 等待按鈕放開
count++; // 計數值加 1
// 狀態機
switch(count % 6){ //產生5個狀態
case 1 : //按第一下亮一顆
digitalWrite(LED[0], HIGH);
digitalWrite(LED[1], LOW);
digitalWrite(LED[2], LOW);
digitalWrite(LED[3], LOW);
break;
case 2 : //按第二下亮兩顆
digitalWrite(LED[0], HIGH);
digitalWrite(LED[1], HIGH);
digitalWrite(LED[2], LOW);
digitalWrite(LED[3], LOW);
break;
case 3 : //按第三下亮三顆
digitalWrite(LED[0], HIGH);
digitalWrite(LED[1], HIGH);
digitalWrite(LED[2], HIGH);
digitalWrite(LED[3], LOW);
break;
case 4 : //按第四下亮四顆,一秒後全滅
digitalWrite(LED[0], HIGH);
digitalWrite(LED[1], HIGH);
digitalWrite(LED[2], HIGH);
digitalWrite(LED[3], HIGH);
delay(1000);
digitalWrite(LED[0], LOW);
digitalWrite(LED[1], LOW);
digitalWrite(LED[2], LOW);
digitalWrite(LED[3], LOW);
break;
case 5 : //按第五下開始跑馬燈
for(int i=0;i<=3;i++){
digitalWrite(LED[i], HIGH);
delay(500);
digitalWrite(LED[i], LOW);
delay(200);
}
for(int i=2;i>=0;i--){
digitalWrite(LED[i], HIGH);
delay(500);
digitalWrite(LED[i], LOW);
delay(200);
}
break;
default:
digitalWrite(LED[0], HIGH);
digitalWrite(LED[1], HIGH);
digitalWrite(LED[2], HIGH);
digitalWrite(LED[3], HIGH);
break;
}
}
}
}
//程式碼解說
//變數宣告:
//count:用來記錄按鈕被按下的次數。
//LED[]:包含 4 個 LED 的 GPIO 腳位(分別為 4, 0, 2, 15)。
//input:接按鈕的 GPIO 腳位(36)。
//setup() 初始化:
//將 input 設為輸入模式,用來偵測按鈕狀態。
//將 LED[] 陣列中的每個 LED 腳位設為輸出模式,以便控制 LED 的開關。
//loop() 主循環:
//偵測按鈕的狀態,當 input 腳位偵測到低電位(LOW)時,代表按鈕被按下。
//利用 delay(20) 做簡單的消抖,確認按鈕按下後再進行狀態切換。
//每次按鈕被按下,count 值會自增 1,並依照 count % 6 的餘數決定目前 LED 的顯示模式。
//LED 顯示模式
//根據 count % 6 的結果,定義了 6 種不同的顯示模式:
//模式 1:按一次按鈕,亮一顆 LED(LED[0])。
//模式 2:按兩次按鈕,亮兩顆 LED(LED[0], LED[1])。
//模式 3:按三次按鈕,亮三顆 LED(LED[0], LED[1], LED[2])。
//模式 4:按四次按鈕,亮四顆 LED(LED[0] 到 LED[3]),1 秒後全部熄滅。
//模式 5:按五次按鈕,顯示跑馬燈效果。LED 依序從 LED[0] 到 LED[3] 亮起,再從 LED[2] 回到 LED[0] 亮起。
//預設模式:所有 LED 保持亮起狀態。