基礎教程15 Arduino埠內部的上拉功能
來自專欄 Arduino 魔法書2 人贊了文章
我是潘,曾經是個工程師。這是為 http://Ardui.Co 製作的 「Arduino 公開課」 系列的入門教程。這節課我們將開始介紹 Arduino 的相關電路。要設計一個強大而穩定的系統,模擬方面的知識是必修課。有任何疑問請在評論區提出,我會逐一回答。
第3課我們介紹了按鍵控制LED開關,當時設置了一個下拉電阻,確保按鈕的穩定性,不會誤觸發。此外,DHT系列溫度感測器、霍爾感測器、旋轉編碼器等脈衝信號模塊應用中,也經常看到上/下拉電阻。那麼,這個電阻是否去掉呢?
在大部分應用場合中,答案是否定的。不過,外接電阻可以拿掉,因為Arduino Uno 的ATmega328P 晶元已經內置了上拉電阻,簡單修改一下外部電路接線和程序,就可以起用。這是ATmega328P 的 Datasheet 的電路結構如下:
首先要理解上拉電阻的含義:
上拉電阻(Pull-up resistors)維基百科的解釋是:是當某輸入埠未連接設備或處於高阻抗的情況下,一種用於保證輸入信號為預期邏輯電平的電阻元件。他們通常在不同的邏輯器件之間工作,提供一定的電壓信號。
其作用是,如果外部組件未啟用,上拉電阻則「微弱地」將輸入電壓信號「拉高」。如果外部組件啟用,它將取消上拉電阻所設置的高電平。通過這樣,上拉電阻可以使引腳即使在未連接外部組件的時候也能保持確定的邏輯電平。
簡單來說,如果沒有外部信號輸入的情況下,保證埠處於一個可以確定的狀態。假如沒有這個電阻,電平可能會因為電源紋波、浪涌等因素,而跳躍,觸發埠。
另外,與上拉電阻接 Vcc 相反,下拉電阻則是接地的,確保沒有輸入的情況下,處於低電平狀態電平。不過,ATmega328P 每個埠都內置了上拉電阻,但沒有下拉電阻,其他型號請參考Datasheet。
我們把第3課按鈕開關的接線調整一下:
線路簡潔了很多。程序修改如下:
/* 作者:Ardui.co 效果:按一下打開,再按一下關閉 版本:1.0 更新時間:2017年2月23日*/int Light = 0; //創建變數Light,並標記 LED 狀態為熄滅void setup (){ pinMode(9, INPUT_PULLUP);// 設置D9為輸入狀態,並且啟動內置上拉電阻 pinMode(13, OUTPUT);}void loop(){ int n = digitalRead(9); if (Light == 0) { if (n == LOW) //改為低電平觸發 { delay(500); //消除抖動 digitalWrite(13, HIGH); Light++; //標記LED狀態為亮 } } else { if (n == LOW) { delay(500); //消除抖動 digitalWrite(13, LOW); Light--; //標記LED狀態為熄滅 } }}
這個程序核心是這行代碼:
pinMode(9, INPUT_PULLUP)
將 INPUT 改為 INPUT_PULLUP,D9 被拉高了,成了一個常態,所以觸髮狀態要改為 LOW 的模式。
推薦閱讀:
※知否知否?知乎x郎朗
※智能門鎖行業或將迎來大爆發!
※默然回首,你在燈火斑斕處~
※piccolo 能夠讓你像施魔法一樣控制家居
※【小黑屋原創】手把手教你 冬天不下床如何優雅的關燈
TAG:Arduino | 樹莓派RaspberryPi | 智能家居 |