Basic Tutorial for Arduino, 入門篇

【Arduino入門教學】第八篇:按鍵開關控制 LED 燈!數位輸入 digitalRead 與電路接法全解析

在前面幾篇教學中,我們學習了如何透過 Arduino 輸出訊號(如控制 LED 閃爍與跑馬燈)。本篇將帶你跨入 數位輸入(Digital Input) 的領域!我們將使用最常見的「按鍵開關(Push Button)」結合 LED 燈,讓 Arduino 接收外部按下的開關訊號並做出相應的控制,深入理解 I/O(輸入/輸出)的核心概念。

 

💡 實驗原理:什麼是數位輸入(Digital Input)?

Arduino 的 GPIO 引腳可以設定為 INPUT(輸入)OUTPUT(輸出)

  • 數位輸入(Digital Input):專門讀取外部元件的狀態。因為是「數位」訊號,Arduino 只會讀取到兩種狀態:

    • 高電位(HIGH / 1):代表約 5V 電壓。

    • 低電位(LOW / 0):代表 0V(GND 地線)。

按鍵開關本身是一個簡單的導通元件。未按下時,電路處於斷路狀態;按下時,內部金屬片閉合導通。

 

🛠️ 準備材料與零件清單

進行本實驗前,請先準備以下電子零件:

  • 主控板:Arduino Uno R3 x 1

  • 傳輸線:USB Type-B 傳輸線 x 1

  • 發光元件:5mm 直插式 LED x 1

  • 輸入元件:4腳微動按鍵開關 x 1

  • 限流電阻:220Ω 直插電阻 x 1(保護 LED)

  • 下拉電阻:10kΩ 直插電阻 x 1(穩定按鍵輸入電位)

  • 開發工具:麵包板 x 1、麵包板單芯跳線若干

🛒  還沒有材料嗎? 推薦選購 【米羅科技】Arduino 程式學習初學者必備套件組 ,一次備齊所有常用感測器與電子元件!

👍爆款推薦:程式學習套件組 

購買網址:shop.mirotek.com.tw

 

🔍 按鍵開關引腳結構說明

四腳按鍵開關(Tactile Switch)內部引腳結構如下:

  • 內部連接:按鈕內部左側兩個引腳彼此相通,右側兩個引腳也彼此相通。

  • 按壓導通:當按紐被按下時,左右兩側才會互相導通(形成通路)。

💡 小技巧:若不確定按鈕引腳方向,可以利用萬用錶的蜂鳴檔測試導通狀態,或對角接線以確保正確運作。

🔌 電路圖與接線步驟 (Wiring Guide)

請參考以下步驟進行麵包板接線:

  1. LED 燈電路

    • 將 LED 陽極(長腳)串聯 220Ω 限流電阻,接至 Arduino 的 Pin 11

    • 將 LED 陰極(短腳)接至 Arduino 的 GND

  2. 按鍵開關電路(下拉電阻接法)

    • 按鍵開關的一端接至 5V 電源。

    • 按鍵開關的另一端接至 Arduino 的 Pin 7

    • 同時在 Pin 7 與 GND 之間接入一顆 10kΩ 電阻(作為下拉電阻 Pull-down Resistor),確保按鈕未按下時 Pin 7 穩定維持在 LOW 電位,避免雜訊干擾。

 

💻 Arduino 範例程式碼

請複製以下程式碼並燒錄至 Arduino 開發板中:

程式:

/*
 * 【Arduino入門教學】第八篇:按鍵開關控制 LED
 * 米羅科技文創學院版權所有
 */

const int LED_PIN = 11;  // 定義 LED 接在數位引腳 Pin 11
const int BUTTON_PIN = 7; // 定義按鍵開關接在數位引腳 Pin 7

int buttonState = 0;     // 儲存按鍵狀態的變數

void setup() {
  pinMode(LED_PIN, OUTPUT);    // 設定 Pin 11 為數位輸出模式
  pinMode(BUTTON_PIN, INPUT);  // 設定 Pin 7 為數位輸入模式
}

void loop() {
  // 讀取 Pin 7 的數位電位狀態 (HIGH 或 LOW)
  buttonState = digitalRead(BUTTON_PIN);

  // 判斷按鍵是否被按下
  if (buttonState == HIGH) {
    digitalWrite(LED_PIN, HIGH); // 按鍵按下(高電位):點亮 LED
  } else {
    digitalWrite(LED_PIN, LOW);  // 按鍵未按下(低電位):熄滅 LED
  }
}

 

 

🧠 程式解說與邏輯分析

  1. 定義常數與變數

    • 使用 const int 指定固定引腳,提升程式可讀性與維護性。

    • buttonState 用於儲存 digitalRead() 讀取到的狀態(HIGHLOW)。

  2. pinMode() 關鍵設定

    • pinMode(LED_PIN, OUTPUT); 設定引腳發出電壓驅動 LED。

    • pinMode(BUTTON_PIN, INPUT); 設定引腳讀取外部電壓。

  3. digitalRead() 讀取訊號

    • 進入 loop() 後,Arduino 會持續輪詢(Poll)Pin 7。

    • 當按鍵按下時,5V 導通至 Pin 7,digitalRead(BUTTON_PIN) 回傳 HIGH,觸發 digitalWrite(LED_PIN, HIGH) 點亮 LED。

    • 當按鍵放開時,透過 10kΩ 下拉電阻連至 GND,Pin 7 讀取到 LOW,LED 熄滅。

 

❓ 常見問題 FAQ

Q1:為什麼按鍵電路上一定要加 10kΩ 電阻?

如果沒有加 10kΩ 下拉電阻,當按鈕未按下時,Pin 7 引腳會處於「浮空狀態(Floating)」,這時 Arduino 會受到空氣中的電磁波干擾,導致讀取到的訊號在 0 與 1 之間隨機跳動,LED 就會不正常閃爍。

Q2:可以不加外接的 10kΩ 電阻嗎?

可以!Arduino 內建了「上拉電阻(Internal Pull-up Resistor)」。只需在程式設定 pinMode(BUTTON_PIN, INPUT_PULLUP);,按鈕另一端改接 GND,即可省去外部電阻。此時未按下為 HIGH,按下時為 LOW(邏輯相反)。

 

 

🚀 總結與下一步

通過本篇學習,你已經掌握了:

  1. 數位輸入 digitalRead() 的使用方法。

  2. 按鍵開關的實體接線與下拉電阻作用。

  3. 透過條件判斷(if-else)實現輸入控制輸出的基礎邏輯。

 

🔗 相關資源與文章推薦

 

 

 

相關文章