在電視綜藝節目或知識競賽中,我們經常看到選手面前各有一個搶答按鈕——誰先按下,對應的指示燈就會亮起。這種互動機制不僅趣味十足,更是學習單晶片(Microcontroller)控制非常經典的入門專案。
本章節將帶您將上一篇的「單一按鍵控制 LED」概念延伸,升級為 3 組按鍵控制 3 組 LED 的搶答器專案,共計使用 Arduino 的 6 個數位 I/O Pin(腳位)。
🛠️ 實驗所需材料清單
進行本實驗前,請先準備以下電子零件與開發板:
- Arduino Uno R3
- USB 傳輸線
- 直插LED
- 按鍵開關
- 220Ω直插電阻
- 10kΩ直插電阻
- 麵包板
- 麵包板跳線
🛒 熱門推薦:想一次購足所有實驗零件嗎?歡迎選購 米羅科技-Arduino 程式學習入門套件組!
🔌 電路接線說明與腳位對照表
本實驗需要同時處理 3 個輸入訊號(按鍵)與 3 個輸出訊號(LED)。為了讓電路清晰易讀,建議依照顏色的對應進行接線:
1. 按鍵與 LED 腳位分配表
按鍵(數位輸入 Pin):
紅色按鍵 (Red Key) ➡️ Pin 10
黃色按鍵 (Yellow Key) ➡️ Pin 9
綠色按鍵 (Green Key) ➡️ Pin 8
LED 燈(數位輸出 Pin):
紅色 LED (Red LED) ➡️ Pin 7
黃色 LED (Yellow LED) ➡️ Pin 6
綠色 LED (Green LED) ➡️ Pin 5
2. 接線細節注意事項
LED 接法:LED 長腳(正極 Anode)連接至對應的 Arduino Pin(5, 6, 7),短腳(負極 Cathode)經由 220Ω 限流電阻連接至 Arduino 的
GND。按鍵接法:按鍵一端接 Arduino
5V,另一端接 Arduino 對應輸入 Pin(8, 9, 10),同時該端需接一支 10kΩ 下拉電阻連至GND,以確保按鍵未按下時維持穩定的低電位(LOW)。
3. 接線說明
💻 Arduino 完整程式碼範例
將以下範例程式碼複製並貼上至 Arduino IDE 中,然後燒錄至您的 Arduino Uno 開發板:
/* * 專案名稱:Arduino 3 人搶答器專案 * 發佈單位:米羅科技文創學院 * 功能說明:讀取 3 組按鍵狀態,並即時控制對應顏色的 LED 燈亮滅 */ // 1. 定義按鍵與 LED 腳位 const int redkey = 10; const int yellowkey = 9; const int greenkey = 8; const int redled = 7; const int yellowled = 6; const int greenled = 5; // 2. 宣告儲存按鍵狀態的變數 int redkey_val = 0; int yellowkey_val = 0; int greenkey_val = 0; void setup() { // 設定 LED 腳位為輸出模式 (OUTPUT) pinMode(redled, OUTPUT); pinMode(yellowled, OUTPUT); pinMode(greenled, OUTPUT); // 設定按鍵腳位為輸入模式 (INPUT) pinMode(redkey, INPUT); pinMode(yellowkey, INPUT); pinMode(greenkey, INPUT); } void loop() { // --- 紅色選手通道 --- redkey_val = digitalRead(redkey); // 讀取 Pin 10 的電位 if (redkey_val == HIGH) { // 當按鍵按下時 (高電位) digitalWrite(redled, HIGH); // 點亮紅色 LED } else { digitalWrite(redled, LOW); // 放開時熄滅 } // --- 黃色選手通道 --- yellowkey_val = digitalRead(yellowkey); // 讀取 Pin 9 的電位 if (yellowkey_val == HIGH) { digitalWrite(yellowled, HIGH); // 點亮黃色 LED } else { digitalWrite(yellowled, LOW); // 放開時熄滅 } // --- 綠色選手通道 --- greenkey_val = digitalRead(greenkey); // 讀取 Pin 8 的電位 if (greenkey_val == HIGH) { digitalWrite(greenled, HIGH); // 點亮綠色 LED } else { digitalWrite(greenled, LOW); // 放開時熄滅 } }💡 程式 logic 優化說明:在下拉電阻(Pull-down)接法下,按鍵按下時輸入端會讀取到HIGH(高電位),此時亮燈;放開時為LOW(低電位),此時滅燈。
🔍 程式碼逐行重點解析
腳位與變數宣告 (
const int):使用
redkey、yellowkey等具意義的名稱代替直接寫死數字,提高程式碼的可讀性與日後維護彈性。
初始化設定 (
setup()):使用
pinMode(pin, OUTPUT)將 Pin 5、6、7 宣告為數位輸出(驅動 LED)。使用
pinMode(pin, INPUT)將 Pin 8、9、10 宣告為數位輸入(讀取按鍵狀態)。
主程式迴圈 (
loop()):digitalRead(pin):持續輪詢(Polling)各按鍵腳位狀態。if / else邏輯判斷:當檢測到按鈕觸發時,透過digitalWrite(pin, HIGH)讓對應的 LED 燈亮起。
🚀 學習延伸與挑戰:如何做成「真正」的搶答器?
目前我們完成的簡易搶答器是「按著才亮燈、放開就熄滅」,且「多人同時按會同時亮」。若想升級為正式比賽用的搶答器,您可以嘗試以下進階邏輯:
第一按鎖定機制(First-press Lockout):
加入一個標記變數(Flag),當第一位選手按下後,立即鎖定程式,此時其他選手再按按鈕將無效。
結合聲音提示(無源/有源蜂鳴器):
結合上一篇或下一篇的 [Arduino 蜂鳴器教學],當有選手搶答成功時,發出「嗶——」聲音提示主持人。
主持人復位按鈕(Reset Button):
增加第 4 個按鈕作為主持人的重置鍵,按下後才清除燈號與鎖定狀態,進入下一題搶答。
❓ 常見問題 FAQ
Q1:為什麼我的按鍵沒按,LED 燈卻會亂閃爍?
A:這通常是因為沒有接「下拉電阻 (Pull-down Resistor)」導致腳位處於「浮空(Floating)」狀態。如果不想接外接電阻,可以改用 Arduino 內建的
INPUT_PULLUP模式(此時按鍵另一端改接 GND,邏輯反轉為 LOW 時按下)。
Q2:LED 燈如果不接 220Ω 電阻會怎樣?
A:直接將 LED 連接至 5V 腳位可能會導致過高電流通過,造成 LED 燒毀或損壞 Arduino 板子的 GPIO 腳位。

