📝 程式碼詳細解說
讓我們一步步了解這個程式是怎麼運作的!
🎯 第一部分:告訴Arduino我們用了哪些接腳
就像在房間裡貼標籤,告訴我們每個開關和燈在哪裡
const int buttonPin = 2;
const int redPin = 3;
const int bluePin = 4;
const int greenPin = 5;
📊 第二部分:建立記憶盒子(變數)
程式需要記住:按鈕現在按下了嗎?上一次是什麼狀態?現在要亮什麼顏色?
int buttonState = HIGH;
int lastButtonState = HIGH;
int ledMode = 0;
⚙️ 第三部分:開機設定(setup函數)
Arduino一開機只會執行一次,用來做初始設定
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
Serial.begin(9600);
Serial.println("RGB Button Controller Ready!");
}
🔄 第四部分:主要工作迴圈(loop函數)
Arduino會一直重複執行這段程式,不停地檢查按鈕有沒有被按下
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == LOW && lastButtonState == HIGH) {
ledMode++;
if (ledMode > 3) ledMode = 0;
Serial.print("Button pressed! LED mode = ");
Serial.println(ledMode);
switch (ledMode) {
case 1:
digitalWrite(redPin, HIGH);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
break;
case 2:
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, HIGH);
break;
case 3:
digitalWrite(redPin, LOW);
digitalWrite(greenPin, HIGH);
digitalWrite(bluePin, LOW);
break;
default:
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
break;
}
delay(200);
}
lastButtonState = buttonState;
}
🧠 程式運作原理(用故事來理解)
想像你在玩一個遊戲:
- 🎮 遊戲規則:每按一次按鈕,燈會換一個顏色
- 📝 記分板:用 ledMode 記住現在是第幾種顏色(0、1、2、3)
- 👀 偵測動作:程式一直看著按鈕,發現「從沒按變成按下」時才動作
- ➕ 計數器:按一次就讓 ledMode 加1,超過3就回到0
- 💡 開關燈:根據 ledMode 的數字決定要亮哪個燈
為什麼要記住「上一次的狀態」?
就像看電影,我們要知道「上一幕」和「這一幕」的差異,才知道劇情有沒有變化。程式也是一樣,要比較「上次按鈕狀態」和「這次按鈕狀態」,才知道按鈕有沒有被按下!
📋 完整程式碼
點擊展開完整程式碼
const int buttonPin = 2;
const int redPin = 3;
const int bluePin = 4;
const int greenPin = 5;
int buttonState = HIGH;
int lastButtonState = HIGH;
int ledMode = 0;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
Serial.begin(9600);
Serial.println("RGB Button Controller Ready!");
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == LOW && lastButtonState == HIGH) {
ledMode++;
if (ledMode > 3) ledMode = 0;
Serial.print("Button pressed! LED mode = ");
Serial.println(ledMode);
switch (ledMode) {
case 1:
digitalWrite(redPin, HIGH);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
break;
case 2:
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, HIGH);
break;
case 3:
digitalWrite(redPin, LOW);
digitalWrite(greenPin, HIGH);
digitalWrite(bluePin, LOW);
break;
default:
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
break;
}
delay(200);
}
lastButtonState = buttonState;
}