第98-2課:點樣用Arduino同按鈕開關嚟開同熄一粒LED
呢個項目會教你點樣用 Arduino 透過按鈕控制 LED。唔係由得 LED 自己閃,而係由你決定佢幾時著:㩒住個掣,LED 就著;放手,佢就熄。呢個係學完基本 blink sketch 之後嘅自然下一步,因為佢會帶出兩個幾乎每個 Arduino 項目都會用到嘅概念 — 讀取數位輸入,同埋用嗰個輸入喺程式入面做決定。
呢度真正有價值嘅係學識微控制器點樣感應實體世界。按鈕係最簡單嘅人類輸入裝置,但同一個模式 — 讀取輸入、測試條件、驅動輸出 — 正正就係你喺 3D 打印機度讀取限位開關、喺保安系統度偵測門被打開、或者喺控制面板度啟動摩打嘅做法。一旦你明白呢個電路,你就可以將 LED 換成幾乎任何嘢。
以下係一啲你可以用同樣技術整嘅實用嘢:
- 一個瞬時門鐘或者呼叫按鈕,㩒住嗰陣會著燈。
- 一個「死人開關」,只有㩒住個掣嗰陣先會令繼電器(同佢供電嘅嘢)通電。
- 一個機器嘅手動測試按鈕,用指示 LED 確認輸入有被接收到。
- 一個摩打驅動器或者水泵嘅啟動按鈕,LED 當作狀態燈。
- 一個簡單嘅遊戲搶答器,第一個㩒掣嘅玩家贏,LED 會顯示邊個贏。
- 一個感應器項目嘅校準或者「學習」按鈕,模式啟動嗰陣會著燈。
硬件同零件
零件清單刻意整到好少,所以呢個係一個好適合做第一個輸入項目嘅原因:
- 一塊 Arduino 板 — Uno、Nano、Mega,或者任何兼容嘅板。
- 一粒 LED,5 mm 或者 3 mm 都得,顏色不拘。
- 一粒俾 LED 用嘅電阻,200 Ω 到 1000 Ω 都可以。
- 一個瞬時按鈕開關。
- 一塊麵包板同埋一啲杜邦跳線。
如果你想知道點解需要電阻,影片入面(03:49 位置)有計條數。一粒典型 LED 自身會降大約 2 V,需要大約 10 mA 電流。用 5 V 電源,剩低嘅 3 V 就要由電阻降壓,所以歐姆定律得出 R = 3 V / 0.01 A = 300 Ω。由 300 Ω 到大約 1000 Ω 都行 — 數值越大,LED 越暗,但越安全同越有效率。電流唔係咁關鍵;你只係用亮度換取更低嘅電流消耗。
接線指南
個電路就係你用嚟做 blink sketch 嘅同一個 LED 電路,加多一個按鈕。LED 嘅陽極(長腳)透過電阻連去 Arduino 嘅 pin 3,陰極(短腳,膠邊平嗰邊)就去地。按鈕就連喺 pin 2 同地之間。
有個細節值得知:按鈕有四隻腳,但佢哋內部係成對嘅。其中兩隻腳係永遠互通,另外兩隻腳又係永遠互通 — 㩒落去就會接通兩對。如果你有萬用錶,用佢嘅導通(響聲)模式搵出邊兩隻腳喺未㩒嗰陣已經係通嘅;嗰兩隻就係你唔應該用嘅一對。喺兩個獨立嘅對入面各揀一隻腳(影片 07:50 位置)。
程式點樣運作
個 sketch 好短,而且幾乎全部都係你可以調整嘅設定。最頂嗰三行就係你真正會改嘅嘢:
const int pushButtonPin = 2;//define a pin number for push button
const int LEDPin = 3;//define a pin that is connected to LED
const int delayLED = 0;//how long the LED should stay ON
pushButtonPin 係按鈕接去嘅數位腳。如果你將按鈕搬去第二個腳,就改呢度 — 記住要同時將實體電線搬去相應位置。
LEDPin 係驅動 LED 嘅腳。任何數位腳都得,但要記住 pin 0 同 pin 1 係俾序列通訊用嘅,所以最好避免用佢哋。
delayLED 係最有趣嘅設定。佢控制你放開按鈕之後 LED 仲會著幾耐,以毫秒為單位。設做 0 即係你手指一鬆開 LED 就即刻熄。設做 1000 就會喺放開之後繼續著足一秒,而 5000 就會著五秒(影片 16:31 位置)。呢個單一數字完全改變咗成個專案嘅感覺,而且係一個好方法去睇到程式碼入面嘅變數點樣直接轉化成你觀察得到嘅行為。
設定入面仲有兩樣嘢值得留意。第一,按鈕引腳係用 INPUT_PULLUP 而唔係普通嘅 INPUT 嚟配置:
pinMode(pushButtonPin, INPUT_PULLUP);//define a pin for push button switch
咁樣會啟用 Arduino 內部嘅上拉電阻,當按鈕冇被按下嘅時候,會將引腳保持喺穩定嘅 HIGH 電平。冇咗佢,一個浮空嘅輸入引腳會接收到雜散電氣噪聲,畀出隨機讀數,你就需要一個外部電阻嚟解決。啟用咗內部上拉之後,接線就保持簡單:按鈕一邊接引腳,另一邊接地。當你按下按鈕,引腳就會被拉低到地,讀數變成 LOW(影片 14:08 位置)。
第二,序列監視器係以 9600 波特率啟動,咁你就可以即時睇到狀態變化:
Serial.begin(9600);//initialize the serial monitor
Serial.println("Robojax LED with push button");//print this text on Serial Monitor
喺主迴圈入面,邏輯就係簡單嘅 if/else。程式碼讀取按鈕引腳並同 LOW 比較。如果按鈕被按下,LED 引腳就會變 HIGH,印出「LED ON」訊息,然後程式會等待 delayLED 毫秒。如果按鈕冇被按下,LED 引腳就會變 LOW,LED 就會熄。因為 loop() 會不斷重複執行,呢個檢查每秒會發生幾千次,所以反應感覺係即時嘅。
即場示範
將 delayLED 設做 1000,按下按鈕會著 LED,而且喺你放開之後仲會著多一秒。將數值降到 5000,LED 就會持續著五秒 — 長到你可以行開按鈕都仲見到佢著住。設做 0 嘅話,LED 就會完全跟住你隻手指:按,著;放,熄(影片 17:02 位置)。
程式碼上傳之後,你可以將 Arduino 從 USB 拔開,用電池或者 5 V 適配器供電。塊板唔需要電腦都可以運行 — 程式儲存喺佢嘅記憶體入面,每次通電都會自動啟動(影片 12:27 位置)。
如果你想嘅係撳一下之後 LED 保持著住,再撳一下先熄,咁就係另一種行為叫做切換,喺 第 98-3 課:點樣用 Arduino 同按鈕開關一個切換式 LED 有講解。按鈕接線係一樣嘅,所以你可以直接重用呢個電路。
呢條片相關嘅專案
- 第 98-1 課:點樣用 Arduino 開同熄一個 LED
- 第 98-3 課:點樣用 Arduino 同按鈕開關一個切換式 LED
- 第 98-4 課:用 Arduino 令 LED 漸變:亮度控制
- 第 98-5 課:用 Arduino 喺撳按鈕時令燈漸變
- 第 98-6 課:用 Arduino 玩蹺蹺板 LED 遊戲
- 第 98-7 課:用 Arduino 同 5 粒 LED 整走馬燈
- 第 98-8 課:用 Arduino 整按鈕同 LED 走馬燈
- 第 98-9 課:用 Arduino 整 LED 電壓電平錶或者用電位器整走馬燈
- 第 98-10 課:Arduino 交通燈
章節
- [00:00] 呢條片 10 個專案嘅概覽
- [01:00] Arduino 逐步教學課程簡介
- [02:29] LED 係咩:符號、陽極、陰極同實物形狀
- [03:49] 用歐姆定律計算 LED 電阻
- [07:32] 喺麵包板上面接 LED 同按鈕嘅線
- [08:50] 解釋程式碼:引腳、setup 同主迴圈
- [12:43] 按鈕開關嘅運作原理
- [13:22] 將按鈕接到引腳 2 同地
- [13:43] 程式碼講解:INPUT_PULLUP 同讀取按鈕
- [16:14] 示範:將 delayLED 由 1 秒改到 5 秒再改到 0
- [19:52] 按鈕切換嘅實際應用
This code has not been parsed yet. Please return to the admin panel to parse it.
你可能需要嘅嘢
-
亞馬遜SunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
亞馬遜
-
亞馬遜
資源與參考資料
-
文件记录Documentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
文件📁
Arduino 函式庫 (zip)
-
SunFounder 3合1智能車學習套件原始碼
3in1-kit-main-v2.zip12.80 MB
用户手册
-
SunFounder 3合1 Arduino 智能車組裝手冊呢份文件逐步展示 SunFounder 3合1 Arduino 智能車嘅組裝過程
SunFounder_car_assembly_manual.pdf1.20 MB