Arduino專案:讀取數位輸入
在這個專案中,您將學習使用digitalRead()
函數從數位I/O腳位讀取數據。
Arduino Uno板上的數位I/O腳位通常位於USB連接埠一側並可能在腳位上有標示為數位的標籤,就像我的情況一樣:
這些腳位的編號從0到13,但除非沒有足夠的腳位,否則您幾乎不會使用腳位0和1,因為它們用於串列通信(請參閱印刷在腳位上的rx和tx標籤)。
首先,我們將建立電路,然後轉到電腦上的Arduino IDE。
這個電路非常簡單。我們將使用一個按鈕,其中一個引腳連接到Arduino的GND,另一個引腳連接到數位腳位#3(任何其他數位腳位均可)。
我們將每秒檢測腳位#3的電壓水平。我們將定義腳位號碼為常數以避免在代碼中使用神奇數字:
1 |
在setup()
函數中,我們呼叫pinMode()
將此腳位設置為輸入腳位,並使用INPUT_PULLUP
選項:
1 | pinMode(BUTTON_PIN, INPUT_PULLUP); |
需要使用INPUT_PULLUP
選項,因為默認情況下,如果沒有任何東西連接到腳位上(如果按鈕未點擊,電路是斷開的,就像沒有任何東西連接到腳位上),輸入腳位是浮動的,這意味著它容易受到干擾,可能會隨機選擇0或1。
在電路中,我們可以添加上拉電阻或下拉電阻,但更簡單的方法是將INPUT_PULLUP
標誌傳遞給Arduino。如果沒有連接任何東西,它將默認為1。
然後,在loop()
函數中,我們使用digitalRead()
函數獲取輸入腳位的值:
1 | int value = digitalRead(BUTTON_PIN); |
這個值可以是0或1,取決於輸入。
如果按下按鈕,Arduino將檢測到0。
如果未按下按鈕,Arduino將檢測到1。
您也可以使用常數LOW
(對應0)和HIGH
(對應1)。
這個值可以打印到串行輸出上,就像在這個程式中一樣:
1 |
|
保存並上傳程式到Arduino,然後在Arduino IDE中點擊右上角的“Serial Monitor”按鈕:
它將顯示串行接口監視器。請確保底部調整到9600波特率,您應該會看到一堆1
,直到您按下按鈕一秒鐘,此時您應該會得到一個0
。
我们还可以点亮一个LED。我们可以将LED添加到电路中,但我们也可以使用Arduino Uno板上的內建LED,它映射到数字I/O腳位#13。我们可以这样编写程序:
1 |
|
实时反映按钮输入值,无需等待1秒。之前我们这样做是为了避免向串行接口写入过多的值,使其难以管理。
看到了吗?当程序启动时,内建LED(靠近顶部的腳位#13 / GND)亮起,当我们按下按鈕时它会变暗
您也可以相反地做(保持其关闭,只有在我们按下按钮时才打开):
1 | digitalWrite(13, !value); |
而且,您可以使用內建常數LED_BUILTIN
代替神奇數字13
:
1 |
|
tags: [“Arduino”, “digital input”, “digitalRead()”, “INPUT_PULLUP”, “LED”]