一、INPUT和OUTPUT
1.當(dāng)引腳設(shè)置為INPUT狀態(tài)時(shí),引腳為高阻抗?fàn)顟B(tài)(100兆歐)。此時(shí)引腳可以用于讀取傳感器信號(hào)或開(kāi)關(guān)信號(hào)。
2.當(dāng)引腳設(shè)置為OUTPUT狀態(tài)時(shí),引腳為低阻抗?fàn)顟B(tài)。這意味著Arduino可以向其它電路元器件提供電流。也就是說(shuō),Arduino引腳在輸出(OUTPUT)模式下可以電亮LED或者驅(qū)動(dòng)電機(jī)。
3.INPUT_PULLUP模式:Arduino微控制器自帶內(nèi)部上拉電阻。在該模式下可以使用該內(nèi)部上拉電阻。
二、引腳的作用
1.數(shù)字引腳:
●引腳1-13用作數(shù)字輸入/輸出引腳。其中,引腳13連接到板載的LED指示燈;引腳 3、5、6、9、10、11具有PWM功能。
●數(shù)字引腳可以開(kāi)啟或者關(guān)閉。打開(kāi)時(shí),處于5V的高電平狀態(tài);關(guān)閉時(shí),處于0V的低電平狀態(tài)。
●當(dāng)數(shù)字引腳配置為輸出時(shí),它們?cè)O(shè)置為0或5V。當(dāng)配置為輸入時(shí),電壓可以在0-5V之間變化, 并轉(zhuǎn)換為數(shù)字表示(0或1)。
●脈寬調(diào)制(PWM)是一種調(diào)制技術(shù),用于將消息編碼為脈沖信號(hào)。pwm由兩個(gè)關(guān)鍵部分組成:頻率和占空比。頻率決定完成單個(gè)周期所需要的時(shí)間以及信號(hào)從高到低的波動(dòng)速度。占空比決定信號(hào)在總時(shí)間段內(nèi)保持高電平的時(shí)間。
2.電源:
●VIN引腳:使用外部電源為UNO開(kāi)發(fā)板供電
●5V和3.3V:向外部組件提供穩(wěn)壓的5V和3.3V
●RESET引腳:復(fù)位Arduino開(kāi)發(fā)板
3.模擬輸入:
●A0-A5作為ADC(模數(shù)轉(zhuǎn)換器)。這些引腳用作模擬輸入,但也可以用作數(shù)字輸入或者輸出。
●模數(shù)轉(zhuǎn)換:ADC是用于將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)的電子電路。引腳A0-A5能夠讀取模擬電壓。ADC可以通過(guò)1024個(gè)數(shù)字電平表示模擬電壓,將電壓轉(zhuǎn)換為微處理器可以理解的位。e.g IP語(yǔ)音(將聲波轉(zhuǎn)換為模擬電壓,通過(guò)設(shè)備的ADC,轉(zhuǎn)換成數(shù)字?jǐn)?shù)據(jù),通過(guò)互聯(lián)網(wǎng)傳輸?shù)浇邮斩恕?/P>
三、PWM(方波控制信號(hào))
1.工作原理:采用不同的占空比來(lái)模擬“模擬輸出”。
2.作用:
●提供模擬輸出;如果數(shù)字輸出被過(guò)濾,則其模擬電壓將介于0%-100%之間
●生成音頻信號(hào)
●控制燈光亮度,為電機(jī)提供變速控制
●生成調(diào)制信號(hào),例如驅(qū)動(dòng)用于遠(yuǎn)程控制的紅外LED
3.使用:
●analogWrite(pin,dutyCycle)
pin值選擇(3,5,6,9,10,11),dutyCycle的值在0~255之間。這種方式pwm信號(hào)的頻率是固定的默認(rèn)值(490Hz)。
# define analogPin 3 void setup() { pinMode(analogPin,OUTPUT); } void loop() { analogWrite(analogPin,100); // 輸出PWM,占空比為 100/255 }
●delayMicroseconds()手動(dòng)實(shí)現(xiàn)頻率可調(diào)的PWM
(1)兩次的digitalWrite輸出狀態(tài)必須相反;
(2)可以用delay()實(shí)現(xiàn)毫秒級(jí)延遲,用delayMicroseconds()實(shí)現(xiàn)微妙級(jí)延遲
(3)特點(diǎn)
1.pwm的比例可以更精確
2.周期和頻率可控制
3.所有pin腳都可以輸出,不僅局限于6個(gè)腳
4.缺點(diǎn):CPU無(wú)法進(jìn)行其他活動(dòng)
void setup() { pinMode(8, OUTPUT); // 設(shè)置8號(hào)引腳為輸出模式 } void loop() { digitalWrite(8, HIGH); delayMicroseconds(100); // 輸出PWM,占空比為100/1000=10% digitalWrite(8, LOW); delayMicroseconds(1000 - 100); // 修改這里的1000可以調(diào)整頻率,總周期為1000us,所以頻率為1000Hz. }
四、三段代碼的區(qū)別
●第一段代碼定義了一個(gè)布爾型變量pushButton,將2號(hào)引腳的電平狀態(tài)賦給pushButton,并直接根據(jù)pushButton的真假賦予1/0進(jìn)入條件判定,同時(shí)在判定時(shí)加入了邏輯運(yùn)算符!,使得判定的值相反。所以該代碼的運(yùn)算結(jié)果為按下按鈕時(shí)LED燈亮,松開(kāi)按鈕時(shí)LED燈不亮。
●第二段代碼定義了一個(gè)整形變量sensorVal,將2號(hào)引腳的電平狀態(tài)賦給sensorVal,在條件判定時(shí),按鈕的邏輯狀態(tài)是反的,當(dāng)按鈕沒(méi)有按下時(shí),2號(hào)引腳為高電平狀態(tài),在if語(yǔ)句中要使13號(hào)引腳為低電平狀態(tài),LED燈不亮,當(dāng)按鈕按下時(shí)則相反。同時(shí)該段代碼的第2行和第10行還啟動(dòng)了串口通訊,并把速率調(diào)到9600,則用戶可以在串口中看到sensorVal的值。
●第三段代碼運(yùn)用了兩個(gè)按鈕操作,因此定義了兩個(gè)boolean變量。但在if語(yǔ)句的判定中沒(méi)有使用!運(yùn)算,即運(yùn)行結(jié)果為當(dāng)兩個(gè)按鈕都沒(méi)有按下時(shí),13號(hào)引腳的狀態(tài)為高電平,LED燈亮;當(dāng)按下了其中一個(gè)按鈕或者兩個(gè)按鈕時(shí),13號(hào)引腳為低電平狀態(tài),LED燈不亮。
五、邏輯運(yùn)算符
●&&邏輯與:只有在兩個(gè)操作數(shù)都為真時(shí)才返回真。
●&:取地址的單目運(yùn)算符;位運(yùn)算符,表示“按位與”,是雙目運(yùn)算符。
●||邏輯或:任意一個(gè)為真時(shí)返回真。
●!邏輯非:當(dāng)操作數(shù)為假時(shí)返回真。
六、串口通訊
void setup(){ Serial.begin(9600); } void loop(){ if (Serial.available()){ int value=Serial.read(); }
1.Serial begin(9600)
設(shè)置串口通信波特比率為9600
2.if(Serial.avilable())
判斷Arduino串口是否收到數(shù)據(jù),函數(shù)Serial.available()返回值為int型,不帶參數(shù)
3.int var=Serial.read()
將串口數(shù)據(jù)讀入到變量var中,函數(shù)Serial.read()也不帶參數(shù),返回值為串口數(shù)據(jù),int型
七、傳感器
1.主要參數(shù)
vcc:5V電源
Trig:控制端(觸發(fā))
Echo:接收端(回聲)
Gnd:接地端
探測(cè)距離:2cm-450cm
感應(yīng)角度:<15度
探測(cè)精度:0.3cm
2.工作原理

const int TrigPin=8; //設(shè)置發(fā)射腳位 const int EchoPin=9; //設(shè)置接收腳位 float cm; //浮點(diǎn)型數(shù)據(jù)類(lèi)型(加小數(shù)點(diǎn),提高精準(zhǔn)度) void setup() { Serial.begin(9600); pinMode(TrigPin,OUTPUT); pinMode(EchoPin,INPUT); } void loop() { digitalWrite(TrigPin,LOW); //用低高低電平發(fā)送脈沖給Trigpin引腳 delayMicroseconds(2); //微秒級(jí)延時(shí) digitalWrite(TrigPin,HIGH); delayMicroseconds(10); digitalWrite(TrigPin,LOW); cm=pulseIn(EchoPin,HIGH)/58.0; //讀取脈沖寬度,換算成厘米 Serial.print(cm); //顯示距離 Serial.print("cm"); //顯示單位 Serial.println(); //回車(chē) delay(1000); }
●const的作用是將定義的腳位存儲(chǔ)在只讀存儲(chǔ)器,即存儲(chǔ)在UNO板的硬盤(pán)當(dāng)中,在運(yùn)行過(guò)程中節(jié)約UNO板的資源。
在C語(yǔ)言中,關(guān)鍵字const用來(lái)定義常量,,如果一個(gè)變量被const修飾,那么它的值就不能再改變。
●pulseIn函數(shù)其實(shí)就是一個(gè)簡(jiǎn)單的測(cè)量脈沖寬度的函數(shù),默認(rèn)單位是us=10^-6s。也就是說(shuō)pulseIn測(cè)出來(lái)的是超聲波從發(fā)射到接收所經(jīng)過(guò)的時(shí)間。對(duì)于除數(shù)58也很好理解,聲音在干燥、攝氏 20度的空氣中的傳播速度大約為343米/秒,合34,300厘米/秒。或者,我們作一下單位換算,34,300除以1,000,000厘米/微秒。即為:0.0343厘米/微秒,再換一個(gè)角度,1/(0.0343 厘米/微秒)即:29.15 微秒/厘米。這就意味著,每291.5微秒表示10CM的距離。1厘米就是29.15微秒。但是發(fā)送后到接收到回波,聲音走過(guò)的是2倍的距離呀。所以實(shí)際距離就是1厘米,對(duì)應(yīng)58.3微秒。實(shí)際上整個(gè)測(cè)距過(guò)程是測(cè)的發(fā)出聲波到收到回波的時(shí)間,你的程序里的第一個(gè)distance實(shí)際上是時(shí)間us。所以換成距離cm,要除以58。當(dāng)然除以58.3可能更精確。所以我們可以用 pulseIn(EchoPin, HIGH) / 58.00獲取測(cè)得的距離。