下圖是一個沒有使用上拉電阻/下拉電阻的電路圖:ui
在按鍵沒有按下時,要讀取的輸入引腳沒有鏈接到任何東西,這種狀態就稱爲「懸空」。spa
因爲附近引腳的電氣噪聲,從處於「懸空」狀態的輸入引腳讀取到的數值會在高電平和低電平之間來回波動,獲得一個不肯定的值。3d
若是用串口監視器將 在沒有使用上拉/下拉電阻的狀況下 從一個數字引腳讀取的輸入打印出來,會獲得圖示的結果:code
能夠看到此時讀取到的輸入並非一個肯定的值。blog
若是換成從模擬引腳讀取輸入能夠更明顯地看到輸入電壓值的波動狀況:class
只有輸入時要考慮上拉電阻和下拉電阻的問題,輸出時不用考慮。原理
上拉電阻:將輸入引腳經過一個10kΩ的電阻上拉到電源上im
電路原理圖:db
在串口監視器中打印出的結果爲:img
使用Arduino I/O口內部上拉功能:
ATmega328P 每一個I/O端口都內置了20kΩ上拉電阻(包括數字引腳和模擬輸入引腳)(注意:沒有內置下拉電阻)。
電路鏈接:
將按鈕的一端接到GND,另外一端接到輸入引腳(這裏是D2),如圖所示:
代碼:
void setup{ ... pinMode(2,INPUT_PULLUP); ... }
下拉電阻:將輸入引腳經過一個10kΩ的電阻下拉到地
電路原理圖: