Arduino数字引脚作为GPIO的使用
引腳與GPIO的關(guān)系
引腳(pin)是對芯片的外部物理接口的一個(gè)稱呼,它是在不把這個(gè)物理接口投入到具體應(yīng)用場合下的稱呼。例如,我們可以說,某某芯片的P1.5引腳可以作為數(shù)字輸出驅(qū)動(dòng)外部數(shù)字設(shè)備,也可以作為串口接受引腳接受串口數(shù)據(jù)。那么P1.5就是一個(gè)引腳(pin),而作為數(shù)字輸出,UART的RX就是這個(gè)引腳的2個(gè)功能。
所以我們可以發(fā)現(xiàn):
1、大多數(shù)MCU的引腳都不止一個(gè)功能。不同引腳內(nèi)部結(jié)構(gòu)不一樣,擁有的功能也不一樣。通過不同的配置,切換引腳的實(shí)際功能。
2、不是所有的引腳都能在程序中使用,比如芯片的Vcc和GND,除了供電,就沒做其他的用處。
?
數(shù)字引腳函數(shù)
pinMode(pin, mode)
作用:設(shè)置一個(gè)引腳(pin)作為GPIO時(shí)的I/O模式。
參數(shù):
??? pin:引腳編號(hào)
??? mode:GPIO的I/O模式,取值有3種
??????????? INPUT :作為數(shù)字輸入
??????????? OUTPUT :作為數(shù)字輸出
??????????? INPUT_PULLUP:作為數(shù)字輸入,且使能引腳的內(nèi)部上拉電阻
Arduino的引腳,在上電時(shí)默認(rèn)就是輸入模式,但最好使用pinMode設(shè)置,更加明確。
當(dāng)配置引腳為數(shù)字輸入模式時(shí),引腳表現(xiàn)為高阻抗?fàn)顟B(tài),引腳內(nèi)部的電流非常小,就如同在引腳前接了一個(gè)100M歐姆的電阻一樣。這也意味外部轉(zhuǎn)換引腳的電平只需很小的電流輸入即可。
當(dāng)使用INPUT模式時(shí),引腳作為數(shù)字輸入,但是不連接任何的拉電阻,處于懸空轉(zhuǎn)態(tài),容易受電子噪聲干擾而隨機(jī)的改變其電平狀態(tài)。一般來說,當(dāng)引腳作為數(shù)字輸入使用時(shí),都讓引腳連接一個(gè)拉電阻:上拉電阻(引腳電平拉高到+5V或者+3.3V)或者下拉電阻(引腳電平拉低到GND)。可以使用Arduino引腳內(nèi)部的上拉電阻(絕大多數(shù)AVR芯片為20K~50K,而Due則是50K~150K,具體參考MCU的數(shù)據(jù)手冊),或者自己外接拉電阻,外接拉電阻阻值一般使用10K的。
關(guān)于上拉和下拉電阻,可以參考-->上拉電阻和下拉電阻
當(dāng)使用INPUT_PULLUP模式時(shí),引腳作為數(shù)字輸入,且使能內(nèi)部上拉電阻。13號(hào)引腳不建議作為數(shù)字輸入引腳使用。因?yàn)?3腳默認(rèn)連接了一個(gè)板載的LED燈,即便是你使能了上拉電阻,LED的電阻會(huì)拉低電壓,使得引腳依然是低電平。如果你非要使用13作為輸入,那就外置拉電阻。
當(dāng)使用OUTPUT模式時(shí),引腳作為數(shù)字輸出,引腳表現(xiàn)為低阻抗,輸出的電流大,高達(dá)40mA,足夠驅(qū)動(dòng)一些基本的設(shè)備,如LED小燈。但不足以驅(qū)動(dòng)馬達(dá)等對電流要求很高的元件。
注:
1、引腳作為PWM輸出時(shí),無需先前使用pinMode配置其模式,因?yàn)镻WM本身就代表了輸出的意思。且官方庫源代碼中可以發(fā)現(xiàn),它已經(jīng)幫我們配置為輸出了。
?
2、模擬引腳也可以作為數(shù)字引腳使用,完全OK。這在數(shù)字引腳不夠用的情況下非常有用。
使用如下宏函數(shù)將一個(gè)模擬引腳編號(hào)映射到數(shù)字引腳編號(hào)上去,以便數(shù)字函數(shù)能識(shí)別。這個(gè)函數(shù)是Arduino內(nèi)置的,無需包含頭文件。
#define analogInputToDigitalPin(p) ((p < 6) ? (p) + 14 : -1)下面是示例代碼
//使用模擬引腳A0作為數(shù)字輸出驅(qū)動(dòng)LED小燈,Blink程序。 int LEDpin = analogInputToDigitalPin(A0);void setup() {pinMode(LEDpin, OUTPUT);digitalWrite(LEDpin, LOW); }void loop() {digitalWrite(LEDpin, HIGH);delay(200);digitalWrite(LEDpin, LOW);delay(200);}?
digitalWrite(pin,value)
作用:設(shè)置一個(gè)數(shù)字輸出引腳的輸出電平值,HIGH或者LOW。
參數(shù):
?????? pin:引腳編號(hào)。此引腳必須在之前使用pinMode設(shè)置為OUTPUT模式。
?????? value:2個(gè)值
?????? ? ? ?? LOW:輸出低電平
?????? ? ? ?? HIGH:輸出高電平
int digitalRead(pin)
作用:讀取一個(gè)數(shù)字輸入引腳的電平值。
返回:HIGH(高電平)或者LOW(低電平)。
參數(shù):
??????? pin:引腳編號(hào)。
?
總結(jié)
以上是生活随笔為你收集整理的Arduino数字引脚作为GPIO的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows 8 应用开发 - 应用栏
- 下一篇: Latex 算法过长 分页显示方法