第98-3課:點樣用Arduino同按鈕開關去開/閂一個切換式LED
按鈕開關周圍都係——遙控器、電器同控制面板——而當一個掣要負責多過一個功能嗰陣,你就需要切換邏輯。呢個項目會示範點樣令一個按鈕第一次撳就開着 LED,再撳就熄咗佢,咁燈就會保持喺你上次撳完嗰個狀態。嗰種「撳一下鎖定,再撳一下解除」嘅行為,就係你將來幾乎所有選單按鈕、電源開關同模式選擇器嘅基礎。
一旦你明白咗切換邏輯,同一套程式碼模式就可以擴展到真實硬件。你可以用佢嚟:
- 用一個面板按鈕切換控制交流電燈或者枱燈嘅繼電器。
- 用一個按鈕而唔係兩個嚟啟動同停止摩打或者水泵。
- 喺裝置上循環切換運作模式(例如慢 / 快 / 關)。
- 建立一個鎖定式警報,佢會一直開着直到有人確認。
- 為音響項目整一個靜音按鈕,佢會記住自己嘅狀態。
- 作為電池供電小工具嘅軟電源開關,取代機械開關。
導師喺影片入面直接指出呢一點(影片 19:52 位置):呢個項目其實完全唔係關於 LED——而係關於切換技巧,你可以將佢指向繼電器、摩打驅動器或者任何其他輸出。
硬件同組件
零件清單刻意做到最精簡,所以如果你啱啱開始,呢個係一個好項目。你需要:
- 一塊 Arduino 板——Uno、Nano 或者 Mega 都用到。
- 一粒 LED,3 mm 或者 5 mm,任何顏色。
- 一粒俾 LED 用嘅電阻,由 200 Ω 到 1000 Ω 都可以。逐字稿解釋咗原因(影片 03:49 位置):一粒 LED 大約降 2 V 並且食大約 10 mA,所以喺 5 V 供電下,剩低嗰 3 V 必須由電阻降走。歐姆定律得出 3 V ÷ 0.01 A = 300 Ω,而由 300 Ω 到 1000 Ω 之間任何值都行——數值越高只會令 LED 越暗。
- 一個按鈕開關。影片展示咗細嘅四腳輕觸式型號同長腳版本(影片 12:43 位置)。如果你冇按鈕,普通開關都一樣得——只要搵到接通同斷開電路嗰兩個端子就得。
- 一塊麵包板同幾條杜邦跳線。
影片入面一個實用貼士(影片 07:50 位置):四腳輕觸式按鈕有兩對內部相連嘅腳。用萬用錶嘅通斷模式搵出邊兩隻腳會一齊響——嗰啲就係開關嘅一邊。將一邊接到輸入腳,另一邊接到地。
接線指南
接線同簡單 LED 加按鈕電路一樣,只係加咗個按鈕喺上面。LED 嘅陽極(長腳)接到腳 3,而佢嘅陰極(短腳,喺外殼平嗰邊)透過電阻接到地。按鈕接喺腳 2 同地之間——唔需要其他嘢,因為程式碼會啟用 Arduino 嘅內部上拉電阻。
嗰個內部上拉值得了解一下:冇佢嘅話,浮空嘅輸入腳會讀到隨機雜訊。啟用 INPUT_PULLUP 會喺按鈕開路時將隻腳保持喺 5 V,而撳按鈕就會將佢拉低到 0 V。呢個就係點解程式碼會將 LOW 讀數當作「撳咗」——同一個普通接去地嘅開關加外部電阻相比,邏輯係反轉嘅。
程式碼解釋
完整 sketch 喺呢篇文章下面有得睇。呢度我哋會集中講你真正想改嘅部分。
喺檔案頂部,兩個腳位指派定義為常數。如果你將電線移到唔同腳位,呢度就係你唯一需要改嘅地方:
const int pushButtonPin = 2;//define a pin number for push button
const int LEDPin = 3;//define a pin that is connected to LED
跟住係三個狀態變數。你通常唔需要改呢啲,但知道佢哋做乜會有幫助:
int pushButtonStatus = 0; // push value from pin 2
int lightStatus = 0;//light status
int pushed = 0;//push statuspushButtonStatus 每次行迴圈嗰陣都會儲存按鈕引腳嘅原始讀數。lightStatus 就記住上一次按鈕引腳讀到嘅嘢,噉樣個 sketch 就可以偵測到啱啱撳落去嗰一刻,而唔係一路不停咁反應。pushed 就係真正嘅切換旗標 — 佢喺 0 同 1 之間跳嚟跳去,決定粒 LED 應該着定係熄。
個切換本身用咗一個好巧妙嘅算術技巧(喺影片 18:30 度)。用一減去個旗標就會將佢反轉:1 - 0 得出 1,而 1 - 1 就得出 0。所以每次偵測到新嘅一撳,一行就搞掂個狀態切換:
pushed = 1-pushed;//toggle the pushed value
delay(100);//give some time for finger to press
嗰 100 ms 嘅延遲係要畀你隻手指離開粒按鈕。冇咗佢嘅話,一次物理上嘅撳掣可能會被計好多次。如果你粒按鈕感覺唔可靠,或者你隻手指震震哋,就加大呢個數值(喺影片 40:39 度)。
觸發切換嘅條件就係成個 sketch 嘅關鍵。佢淨係喺按鈕唔係被撳住(HIGH,因為有上拉電阻)而且上一次讀數係 LOW 嗰陣先至會觸發 — 即係話粒按鈕啱啱撳完放開咗:
if(pushButtonStatus == HIGH && lightStatus == LOW){
pushed = 1-pushed;//toggle the pushed value
delay(100);//give some time for finger to press
}
最後,粒 LED 就由個切換旗標嚟驅動,而當前嘅按鈕讀數就會儲起留返下次比較用:
lightStatus = pushButtonStatus;
if(pushed == HIGH){
Serial.println("Light ON");
digitalWrite(LEDPin, HIGH); //turn the LED ON
}else{
Serial.println("Light OFF");
digitalWrite(LEDPin, LOW);//turn the LED OFF
}
你亦都可以開個 Serial Monitor,set 做 9600 baud,噉你就可以喺撳掣嗰陣睇住 "Light ON" 同 "Light OFF" 嘅訊息。
即場示範
喺影片度(喺影片 19:41 度)你可以睇到實際嘅行為:第一次撳會着咗粒 LED,而且放開手指之後佢都會繼續着住。下一次撳就會熄咗佢,而且佢會繼續熄住。唔需要㩒住粒按鈕,呢個就正正係呢個 project 同 Lesson 98-2: How to Turn On and Off an LED Using a Push Button with Arduino 入面講嗰個簡單啲嘅「㩒住先着」版本嘅分別。
影片亦都指出你可以將粒 LED 換做繼電器模組嚟切換市電供電嘅裝置,或者換做摩打驅動器嚟開同停一個摩打。個切換邏輯唔會變 — 淨係得個輸出裝置變咗。
同一條影片入面展示嘅其他變化 — 令 LED 漸變、搖搖板圖案、走馬燈、電壓條錶、同交通燈 — 每一個都喺佢自己嘅教學入面有講,下面有連結。
呢條影片嘅相關 project
- Lesson 98-1: How to Turn On and Off an LED with Arduino
- Lesson 98-2: How to Turn On and Off an LED Using a Push Button with Arduino
- Lesson 98-4: Fading an LED Light Using Arduino: Brightness Control
- Lesson 98-5: Fade Light When a Button Is Pressed Using Arduino
- Lesson 98-6: Seesaw LED Game with Arduino
- Lesson 98-7: Walking Light Using Arduino and 5 LEDs
- Lesson 98-8: Walking Light with Push Button and LEDs with Arduino
- Lesson 98-9: LED Voltage Level Meter Using Arduino or walking light with potentiometer
- Lesson 98-10: Arduino Traffic Light
章節
- [00:00] 10 個 LED project 概覽
- [01:00] Arduino 逐步教學課程簡介
- [02:29] LED 基礎:符號、陽極、陰極、同電阻計算
- [05:53] Project 1:着同熄一粒 LED
- [12:43] Project 2:按鈕控制 LED
- [17:13] Project 3:按鈕切換 LED 着同熄
- [20:12] Project 4:令 LED 漸變
- [23:20] Project 5:用按鈕令 LED 漸變
- [27:32] Project 6:兩粒 LED 嘅搖搖板
- [30:47] Project 7:五粒 LED 嘅走馬燈
- [36:41] Project 8:用按鈕推進嘅走馬燈
- [42:25] Project 9:用電位器嘅 LED 電壓電平錶
- [49:25] Project 10:Arduino 交通燈
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