實驗目的
使用按鍵 (PushButton)控制 LED 燈號的開關,當按鍵被按下時打開 LED 燈號,按鍵放開時關閉 LED 燈號。材料
- Arduino 主板 x 1
- LED x 1
- PushButton 或 Switch 開關 x 1
- 10K 電阻 x 1
- 麵包板 x 1
- 單心線 x N
接線
- 把 LED 接到 pin13,長腳(陽極)接到 pin13,短腳(陰極)接到 GND
- PushButton 一支腳接到 +5V
- pin2 接到 Pushbutton 的另一支腳,同一支腳位接一個 10K 電阻連到 GND
電路圖
程式碼
說明:
- L01~L02: 定義按鍵與 LED 的腳位,按鍵接在 pin2, 而 LED 接在 pin13
- L16: 讀取按鍵的狀態並保存到 buttonState 變數裏
- L20~L26: 這支程式的目的是按下按鍵時要打開 LED 燈號,放開按鍵時要關閉 LED 燈號,因此,假如 buttonState 為 HIGH,代表按鍵狀態是按下(pressed)的,此時要打開 LED,反之,假如 buttonState 為 LOW,代表按鍵狀態是放開的,此時要關閉 LED
註:這支是 Arduino 內建的範例程式,點選 File > Examples > 2.Digital > Button 就可以找到。
範例照片/影片
Youtube 上正好有段講解使用按鍵控制 LED 的影片,我們來看看他的示範:
注意!影片所用的範例程式,它是按下按鍵時關閉 LED 燈號,放開按鍵時打開 LED 燈號,邏輯與本文的範例相反。
不好意思,小弟寡聞,不知是要移動那條線方能使電路邏輯相反呢?
回覆刪除Hi,
回覆刪除這會用到 Active-Low 的概念,可以參考這篇的說明:
http://www.arduino.cc/en/Tutorial/Pushbutton
基本上,方法就是用一顆 pull-up 電阻把 button 一支腳接到 +5V。也就是說,(1) 把這篇的電阻換到 +5v,然後 (2) pin2 本來跟 Gnd 接在一起,現在改接到 +5v 就可以了。
相關的概念可以參考「低態動作 LED (Active Low LED)」這篇:
http://coopermaa2nd.blogspot.com/2011/05/led-active-low-led.html
麵包板電路:
回覆刪除http://bitly.com/HJqmgV
您好^^最近因Arduino的實驗品而購買了for Arduino Button Module搞了好幾天才發現到~這類型的模組接線與您教學的方法截然不同,當然發現到模組的方法簡單許多,我也記錄了一下分享給您。
回覆刪除http://www.dotblogs.com.tw/erichuang223/archive/2012/09/03/74554.aspx
你買的那個按鈕,是按下為 LOW 放開為 HIGH 嗎?
回覆刪除看一下那個按鈕的電路,有可能它是把電阻接到 VCC,這樣就變成 pull up resistor 了
感謝你的分享
版主你好 我想應該有很多人跟我有一樣的疑問 在材料方面10K電阻這個值是怎樣計算來的 看了很多例子都有用到電阻 只是非本科系的我不太懂電阻採用的標準為何 如何計算 比如前一個例子讓led發亮 你的例子裡簡略了電阻的使用 我看官網的例子裡採用220歐姆 只是也沒有如何計算及量測 可以幫我解答一下嗎
回覆刪除Hi,
回覆刪除「為什麼 LED 要用 220 歐姆限流的電阻?」,這個你可以參考一下葉難這篇說明: http://yehnan.blogspot.tw/2012/03/arduinoled220-ohm.html
至於這篇為什麼要用一顆 10k 的電阻 (在這裏又稱為 pull-down 下拉電阻)
簡略的說,是為了讓按鈕未被按下時保持訊號穩定 (不能不接電阻,不然按鈕沒按下時
power 會直接接到 GND 形成短路),用 10k 電阻的話,5v / 10000 = 0.0005A
耗損的電流很小,所以通訊選 10k 就夠用了。
上面兩個問題用文字說明可能不太好懂,改天若有空再整理篇比較好懂的 post
你是說,按鈕「按下又放開」也就是「按一下 (Click)」時只做 LED ON 或 OFF 其中一個動作嗎?
回覆刪除可以的,只是要處理按鈕彈跳的問題 (debounce) 會比較好
建議試試 clickbutton 這個 library
clickbutton library 可以辨識出 click, double clicks 事件