閱讀本文大概需要3分鐘。
前面介紹了Arduino數字I/O,通過控制數字引腳輸出來控制LED燈亮滅。本篇將介紹數字I/O的輸入功能,通過檢測按鍵狀態來控制LED燈亮滅,把LED的亮滅變成人為可控制的。
1. 實驗材料Uno R3開發板
配套USB數據線
麵包板及配套連接線
1個LED燈
1個220Ω電阻
1個輕觸按鍵
實驗中我們用到了輕觸按鍵,常見的有2腳按鍵和4腳按鍵,其內部結構如下圖所示:
當按下按鍵時,按鍵兩端接通,當放開時,兩端再次斷開。
2. 實驗步驟根據原理圖搭建電路
直插式LED燈負極接開發板GND,正極接220Ω限流電阻,電阻另一端接開發板數字9引腳。按鍵一端接開發板GND,另一端接數字引腳2。
實驗原理圖如下圖所示:
實物連接圖如下圖所示:
新建sketch,拷貝如下代碼替換自動生成的代碼並進行保存。
1
5
6int buttonPin = 2;
7int ledPin = 9;
8
9int buttonState = 0;
10
11void setup() {
12 pinMode(ledPin, OUTPUT);
13 pinMode(buttonPin, INPUT_PULLUP);
14}
15
16void loop() {
17
18 buttonState = digitalRead(buttonPin);
19
20 if (buttonState == LOW) {
21 delay(80);
22 if (buttonState == LOW)
23 {
24 digitalWrite(ledPin, HIGH);
25 }
26 }
27 else {
28 digitalWrite(ledPin, LOW);
29 }
30
31}
連接開發板,設置好對應埠號和開發板類型,進行程序下載。
按下按鍵,LED燈點亮。放開按鍵,LED燈熄滅。
digitalRead()
描述:讀取指定數字引腳的值
函數原型:digitalRead(pin)
參數:要讀取的數字引腳編號
返回值:HIGH(1)或LOW(0)
5. 總結分析通過digitalRead()函數來讀取數字I/O引腳狀態,然後根據狀態去點亮或者熄滅LED燈。需要注意:
由於Arduino上電後,數字I/O管腳處於懸空狀態,此時通過digitalRead()讀到的是一個不穩定的值(可能是高,也可能是低)。所以通過pinMode()函數設置按鍵引腳為上拉輸入模式。即使用內部上拉電阻,按鍵未按下時,引腳將為高電平,按鍵按下為低電平。
按鍵在按下的過程中,有一段接觸未接觸的不穩定過程,即按鍵的抖動。在判斷按鍵狀態時,通過delay()延時跳過抖動的不穩定狀態,即軟體上進行消抖。
可以不使用內部上拉電阻,在電路上添加按鍵的上拉電阻或下拉電阻,可達到相同效果。
掃碼加入微信公眾號:TonyCode