簡介
在數字邏輯電路中,一個信號不是0,就是1。正是因為這樣,數字電路的設計才簡單,可靠。
通常,用電壓5v(或者接近5V)代表 on 開狀態,代表高電平,對應狀態 1。用電壓0v (或者接近0v)代表off關狀態,代表低電平,對應狀態0。
有些開發板是基於3,3V的,因此使用3.3V作為高電平。
如果一個線路中的電壓處於不確定的狀態(例如一個引腳不和任何其它回路連通時),那我們就說它的電壓是浮動的,他會隨着時間不斷變化,跳動,而且很容易受到外界環境的影響。處於這種不確定狀態的電路會被隨機解釋為高或者低電平。 這種現象也叫電子噪聲。
然而程序必須是嚴格准確的,所以電路的設計一定要避免線路電壓處於浮動狀態。
我們可以使用上拉電阻或者下拉電阻將電路的電壓在任何時候都保持在確定的狀態下,這就是上拉電阻和下拉電阻的作用。
下拉電阻
作用:將一個未知的電平拉低到穩定的低電平狀態。

上圖中,我們要判定input這個引腳 是高電平還是低電平。
當按鈕S2沒按下時,Input通過2個電阻接到GND,是穩定的低電平 。 當S2按下時,+5V ,S2 , R2 ,GND這條路導通,而Input接在R2的前面,因此會得到高電平。
因此我么可以通過Input端是高電平還是低電平來判斷S2是否按下。如果沒有 下拉電阻R2,那么S2沒按下前,Input沒有和任何東西相連,它的電平處於浮動狀態,且很容易受環境影響,帶來電子噪聲。
上拉電阻
作用:將一個未知的電平拉高到穩定的高電平狀態。
當S2沒按下時,Input通過2個電阻和+5V連接(注意電路中並沒構成回路,因此不會有壓降,所以Input端依然是高電平),為高電平。當S2按下時,+5V,R2,S2,GND形成回路,R2 電阻大,產生壓降大,因此后面的Input就是低電平。
因此,可以通過Input端的電平來判斷S2是否按下。
相比下拉電阻,上拉電阻在數字電路中使用的更多。
Arduino中的拉電阻
Arduino的數字引腳和模擬引腳都內置了【上拉電阻】,電阻為20K~50K歐姆,他們需要使用 代碼去激活使能。
提示:
1、如果你需要為Arduino自己配置外置的拉電阻,官方建議為10K歐姆。
2、不建議使用13腳作為輸入引腳使用,因為13腳配置了一個板載的LED燈,即便是你使能了上拉電阻,LED等的電阻會拉低電壓,使得引腳依然是低電平。如果你非要使用13作為輸入,那就外置拉電阻。
使能Arduino上拉電阻的代碼:
pinMode(10, INPUT); digitalWrite(10, HIGH); //激活10號引腳的上拉電阻,因此在沒有收到任何輸入信號時,10號引腳一直是高電平。 /////////或者 pinMode(10, INPUT_PULLUP) ; //最新的Arduino庫支持使用INPUT_PULLUP配置為輸入且使能上拉電阻,和上面的2行代碼等效。
注意:如果你配置一個引腳為輸出,且使能上拉電阻,然后又切換IO模式為OUTPUT,那么此引腳會保持高電平狀態。反之:如果一個引腳為原本為輸出模式,且輸出高電平,切換為輸入后,將自動激活上拉電阻。
動手試一試
實驗目的:不使用Arduino內置的上拉電阻,通過電子器件構造一個外置【下拉電阻】,實現功能:通過8號引腳判斷按鈕釋放按下,按鈕沒按下時,8號引腳始終接受低電平信號,按鈕按下時,接受到高電平信號。每當按鈕按下時,反轉板載LED的狀態.
電路連線

代碼
void setup() { pinMode(LED_BUILTIN , OUTPUT); //使用板載LED作為控制對象. } void loop() { if(HIGH == digitalRead(8)){ //如果按鈕按下 digitalWrite(LED_BUILTIN , LOW == digitalRead(LED_BUILTIN) ? HIGH : LOW ); //則反轉 LED的狀態 delay(600); } }