1. 簡介
我們將學習如何使用 Arduino 和按鈕、開關來控制 LED 燈發亮與熄滅的狀態,幫助你理解數位輸入與輸出的概念:
開關(Toggle Switch):開關則是一種永久開關,當你切換到開的位置時,電路會保持閉合狀態,直到切換回關閉的位置,生活中常見的例子為:天花板開燈與關燈的應用、各類電器的電源。


按鈕(Push Button):按鈕是一種臨時開關,當你按下時電路閉合,放開時電路斷開。這在電子項目中非常常見,用於觸發某些裝置行為,例如:馬達的轉動開關瞬間


Arduino 當中數位輸入與輸出:數位腳位可以設置為輸入或輸出模式。當設置為輸入時,可以讀取按鈕或開關的狀態,設置為輸出時,可以控制 LED 燈的開啟或關閉。
2. 材料介紹與準備
- Arduino uno*1:電路程式控制的主要控制元件,點我購買
- 麵包板*1:置放電子元件的底座,點我購買
- 5mm LED燈*1:發光元件,點我購買
- 220Ω電阻*1:限制電流值,避免電子元件過載燒壞,點我購買
- 杜邦線 公公_10cm*2:快速連接電子元件的電路,點我購買
- 輕觸按鈕*1:控制電路通路與斷路、提供輸入訊號,點我購買
- 船型開關*1:接通與關閉電路,點我購買
3. 範例1
先以不寫程式的狀況下,製作一個簡單的開關電路,當按下按鍵時,形成通路,電流從Arduino Uno的5V端流過LED,然後通過按鍵回到GND,形成一個完整的迴路,LED因此亮起,電路連接如下:

4. 範例2
接著我們試著利用程式去偵測按鍵是否按下的方式控制LED燈亮滅,使用PIN 4來監控按鍵的狀態,而PIN 3則用來控制LED的開關。
在這個電路中,當Pin腳並未連接到任何電路時,會導致Pin腳進入一種稱為"Floating"(懸空)狀態,在讀取時可能會因為周圍的電磁噪聲而不穩定,造成時而讀取到HIGH(高電位)或LOW(低電位)。
為了解決這個懸空問題,我們會接上一個電阻220Ω,確保在按鍵未被按下的情況下,Pin腳的狀態能穩定在高電位。,這樣的設置有效地提高電路的穩定性與可靠性,根據接入的方式不同,可以分為:
- l Pull-Up(上拉電阻):指電阻連接至VCC電源(正電源),通常是較為普遍的做法
- l Pull-Down(下拉電阻):指電阻連接至地線(GND)
電路連接方式:

程式說明:
int BUTTON = 4; //定義按鈕連接的接腳為4
int LED =3; //定義LED燈連接的接腳為3
int buttonState = 0; //儲存按鈕的初始化狀態
void setup() {
pinMode(LED, OUTPUT); //設定LED引腳為輸出模式
pinMode(BUTTON, INPUT); //設定按鈕引腳為輸入模式,讀取按鈕的狀態
}
void loop() {
buttonState = digitalRead(BUTTON); //讀取按鈕的狀態,並將其儲存到 buttonState 變數中
if(buttonState == LOW){ //檢查按鈕是否被按下(按下時狀態為LOW)
digitalWrite(LED, HIGH); //LED發亮
}else{ //如果按鈕沒有被按下的情況
digitalWrite(LED_PIN, LOW); //LED熄滅
}
}
注意:我們是選擇用Pull-Up(上拉電阻),所以按鍵的狀態在未按下時,會讀取到HIGH按下了才會讀到LOW
5. 範例3
其實在Arduino Uno板上的每個引腳都有內建約20K歐姆的上拉電阻,我們可以直接利用內建的電阻來實現按鍵的功能,而不需要額外添加外部電阻。
如果我們想使用這個內建的上拉電阻,只需在程式中在設定按鍵引腳時,將其設為INPUT_PULLUP模式,這樣當按鍵未被按下時,引腳會自動讀取到HIGH狀態,而按下按鍵時則會讀取到LOW狀態。
這樣的做法不僅簡化了電路設計,還減少了元件的使用,讓我們的Arduino專案更加簡潔和方便
電路連接方式:

程式說明:
int BUTTON = 4; //定義按鈕連接的接腳為4
int LED =3; //定義LED燈連接的接腳為3
int buttonState = 0; //儲存按鈕的初始化狀態
void setup() {
pinMode(LED, OUTPUT); //設定LED引腳為輸出模式
pinMode(BUTTON, INPUT_PULLUP); //設定按鈕引腳為輸入模式,讀取按鈕的狀態
}
void loop() {
buttonState = digitalRead(BUTTON); //讀取按鈕的狀態,並將其儲存到 buttonState 變數中
if(buttonState == LOW){ //檢查按鈕是否被按下(按下時狀態為LOW)
digitalWrite(LED, HIGH); //LED發亮
}else{ //如果按鈕沒有被按下的情況
digitalWrite(LED_PIN, LOW); //LED熄滅
}
}
我們將引腳的模式從普通的INPUT改成了INPUT_PULLUP,這樣告訴Arduino Uno板,這個引腳不僅用作輸入,還要啟用內建的上拉電阻。
pinMode(BUTTON_PIN, INPUT_PULLUP);
要特別注意,就是Pin 13的引腳,已經接了一顆LED和電阻,因此不適合使用INPUT_PULLUP模式,使用這個引腳可能會影響LED的正常操作!
大家也來練習操作看看吧~