教學(xué)課件:《Arduino零基礎(chǔ)C語言編程》孫秋鳳_第1頁
教學(xué)課件:《Arduino零基礎(chǔ)C語言編程》孫秋鳳_第2頁
教學(xué)課件:《Arduino零基礎(chǔ)C語言編程》孫秋鳳_第3頁
教學(xué)課件:《Arduino零基礎(chǔ)C語言編程》孫秋鳳_第4頁
教學(xué)課件:《Arduino零基礎(chǔ)C語言編程》孫秋鳳_第5頁
已閱讀5頁,還剩426頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第一章

認(rèn)識(shí)Arduino2025/2/27Arduino零基礎(chǔ)C語言編程11.1Arduino是什么?Arduino是一個(gè)開放源碼電子原型平臺(tái),擁有靈活、易用的硬件和軟件。Arduino可以接收來自各種傳感器的輸入信號(hào)從而檢測出運(yùn)行環(huán)境,并通過控制光源,電機(jī)以及其他驅(qū)動(dòng)器來影響其周圍環(huán)境。板上的微控制器編程使用Arduino編程語言(基于Wiring)和Arduino開發(fā)環(huán)境(以Processing為基礎(chǔ))。Arduino可以獨(dú)立運(yùn)行,也可以與計(jì)算機(jī)上運(yùn)行的軟件(例如,F(xiàn)lash,Processing,MaxMSP)進(jìn)行通信。Arduino開發(fā)

IDE接口基于開放源代碼,可以免費(fèi)下載使用,開發(fā)出更多令人驚艷的互動(dòng)作品。2025/2/27Arduino零基礎(chǔ)C語言編程2有趣的案例寵物喂食器四軸飛行器電視自動(dòng)消聲器:夠了!(Enough!)文字炸彈(txtBomber)基于Arduino的智能家居方案tiltradio

使用者通過傾斜tiltradio來尋找喜愛的頻道。谷歌“會(huì)說話的鞋”這個(gè)最經(jīng)典的開源硬件項(xiàng)目,誕生于意大利的一間設(shè)計(jì)學(xué)校。Arduino的核心開發(fā)團(tuán)隊(duì)成員包括:MassimoBanzi,DavidCuartielles,TomIgoe,GianlucaMartino,DavidMellis和NicholasZambetti。2025/2/27Arduino零基礎(chǔ)C語言編程8關(guān)于Arduino的名字還有個(gè)有趣的由來,意大利北部一個(gè)如詩如畫的小鎮(zhèn)「Ivrea」,橫跨過藍(lán)綠色DoraBaltea河,它最著名的事跡是關(guān)于一位受壓迫的國王。公元1002年,國王Arduino成為國家的統(tǒng)治者,不幸的是兩年后即被德國亨利二世國王給廢掉了。今日,在這位無法成為新國王的出生地,cobblestone街上有家叫「diReArduino」的酒吧紀(jì)念了這位國王。MassimoBanzi經(jīng)常光臨這家酒吧,而他將這個(gè)電子產(chǎn)品計(jì)劃命名為Aruino以紀(jì)念這個(gè)地方。2025/2/27Arduino零基礎(chǔ)C語言編程91.2認(rèn)識(shí)ArduinoUNO圖中標(biāo)出的數(shù)字口和模擬口,即為常說的I/O。數(shù)字口有0~13,模擬口有0~5。2025/2/27Arduino零基礎(chǔ)C語言編程101.2認(rèn)識(shí)ArduinoUNOUNO可以通過兩種方式供電方式:通過

USB供電通過外接6~12V的DC電源。主控板上4個(gè)LED燈和復(fù)位按鍵。ON是電源指示燈,通電就會(huì)亮了。L是接在數(shù)字口13上的一個(gè)LED,在下面一節(jié)會(huì)有個(gè)樣例來說明的。TX、RX是串口通訊指示燈,比如在下載程序的過程中,這兩個(gè)燈就會(huì)不停閃爍。2025/2/27Arduino零基礎(chǔ)C語言編程111.2.1下載ArduinoIDE打開網(wǎng)頁輸入網(wǎng)址http://arduino.cc/en/Main/Software,進(jìn)入到頁面后,找到下圖顯示部分,下載最新版本。Windows用戶,點(diǎn)擊下載Windows(ZIPfile),如果Mac,Linux用戶則選擇相應(yīng)的系統(tǒng)。下載完成后,解壓文件,把整個(gè)Arduino1.8.5文件夾放到電腦熟悉的位置,便于之后查找。2025/2/27Arduino零基礎(chǔ)C語言編程121.2.2安裝驅(qū)動(dòng)把USB一端插到ArduinoUNO上,另一端連到電腦。連接成功后,UNO板的紅色電源指示燈ON亮起。然后,打開控制面板,選擇設(shè)備管理器。

2025/2/27Arduino零基礎(chǔ)C語言編程13找到其它設(shè)備>Arduino-xx,

右擊選擇更新驅(qū)動(dòng)程序軟件。2025/2/27Arduino零基礎(chǔ)C語言編程14在彈出的對話框中選擇下面一項(xiàng)->手動(dòng)查找并安裝驅(qū)動(dòng)程序軟件。2025/2/27Arduino零基礎(chǔ)C語言編程15打開到ArduinoIDE安裝位置,就是上面那個(gè)解壓文件的位置,選擇搜索路徑到drivers,點(diǎn)擊下一步。選擇始終安裝此驅(qū)動(dòng)程序軟件,直至完成。2025/2/27Arduino零基礎(chǔ)C語言編程16出現(xiàn)下圖,說明驅(qū)動(dòng)安裝成功。2025/2/27Arduino零基礎(chǔ)C語言編程17此時(shí),設(shè)備管理器端口會(huì)顯示一個(gè)串口號(hào)。2025/2/27Arduino零基礎(chǔ)C語言編程181.2.3 認(rèn)識(shí)ArduinoIDE打開ArudinoIDE,就會(huì)出現(xiàn)ArduinoIDE的編輯界面。2025/2/27Arduino零基礎(chǔ)C語言編程19如果英文界面不太習(xí)慣的話,可以先更改為中文界面。選擇菜單欄FilePreferences,會(huì)跳出下面這個(gè)對話框,選擇Editorlanguage簡體中文,點(diǎn)擊OK。2025/2/27Arduino零基礎(chǔ)C語言編程20ArduinoIDE基本也只需要用到右圖標(biāo)示出來的部分就可以了,右圖大部分的白色區(qū)域就是代碼的編輯區(qū),用來輸入代碼的。注意,輸入代碼時(shí),要切換到英文輸入法的模式。下面黑色的區(qū)域是消息提示區(qū),會(huì)顯示編譯或者下載是否通過。2025/2/27Arduino零基礎(chǔ)C語言編程211.2.4 下載一個(gè)Blink程序下載一個(gè)最簡單的代碼,既可以熟悉下載程序的整個(gè)過程,同時(shí)也測試下板子好壞。UNO板上標(biāo)有L的LED。這段測試代碼就是讓下圖中的LED燈閃爍。2025/2/27Arduino零基礎(chǔ)C語言編程22插上USB線,打開ArduinoIDE后,找到“Blink”代碼。2025/2/27Arduino零基礎(chǔ)C語言編程23通常,寫完一段代碼后都需要校驗(yàn)一下,看看代碼有沒有錯(cuò)誤。點(diǎn)擊“校驗(yàn)”。

下圖顯示了正在校驗(yàn)中。

校驗(yàn)完畢!

2025/2/27Arduino零基礎(chǔ)C語言編程24在下載程序之前,還要先告訴ArduinoIDE板子型號(hào)以及相應(yīng)的串口。選擇所用的板卡Board->ArduinoUNO。2025/2/27Arduino零基礎(chǔ)C語言編程25選擇當(dāng)前的串口——COM口。

最后,點(diǎn)擊“下載”。

下載完畢!

以上就是給Arduino下載程序一個(gè)blink程序的整個(gè)過程。以后程序下載就照著這個(gè)步驟做就可以了,再理一下思路,分為三步走:

校驗(yàn)->選擇boards和com->下載!2025/2/27Arduino零基礎(chǔ)C語言編程261.1Arduino是什么?Arduino是一個(gè)開放源碼電子原型平臺(tái),擁有靈活、易用的硬件和軟件。Arduino可以接收來自各種傳感器的輸入信號(hào)從而檢測出運(yùn)行環(huán)境,并通過控制光源,電機(jī)以及其他驅(qū)動(dòng)器來影響其周圍環(huán)境。板上的微控制器編程使用Arduino編程語言(基于Wiring)和Arduino開發(fā)環(huán)境(以Processing為基礎(chǔ))。Arduino可以獨(dú)立運(yùn)行,也可以與計(jì)算機(jī)上運(yùn)行的軟件(例如,F(xiàn)lash,Processing,MaxMSP)進(jìn)行通信。Arduino開發(fā)

IDE接口基于開放源代碼,可以免費(fèi)下載使用,開發(fā)出更多令人驚艷的互動(dòng)作品。2025/2/27Arduino零基礎(chǔ)C語言編程27有趣的案例寵物喂食器四軸飛行器電視自動(dòng)消聲器:夠了!(Enough!)文字炸彈(txtBomber)基于Arduino的智能家居方案tiltradio

使用者通過傾斜tiltradio來尋找喜愛的頻道。谷歌“會(huì)說話的鞋”這個(gè)最經(jīng)典的開源硬件項(xiàng)目,誕生于意大利的一間設(shè)計(jì)學(xué)校。Arduino的核心開發(fā)團(tuán)隊(duì)成員包括:MassimoBanzi,DavidCuartielles,TomIgoe,GianlucaMartino,DavidMellis和NicholasZambetti。2025/2/27Arduino零基礎(chǔ)C語言編程33關(guān)于Arduino的名字還有個(gè)有趣的由來,意大利北部一個(gè)如詩如畫的小鎮(zhèn)「Ivrea」,橫跨過藍(lán)綠色DoraBaltea河,它最著名的事跡是關(guān)于一位受壓迫的國王。公元1002年,國王Arduino成為國家的統(tǒng)治者,不幸的是兩年后即被德國亨利二世國王給廢掉了。今日,在這位無法成為新國王的出生地,cobblestone街上有家叫「diReArduino」的酒吧紀(jì)念了這位國王。MassimoBanzi經(jīng)常光臨這家酒吧,而他將這個(gè)電子產(chǎn)品計(jì)劃命名為Aruino以紀(jì)念這個(gè)地方。2025/2/27Arduino零基礎(chǔ)C語言編程341.2認(rèn)識(shí)ArduinoUNO圖中標(biāo)出的數(shù)字口和模擬口,即為常說的I/O。數(shù)字口有0~13,模擬口有0~5。2025/2/27Arduino零基礎(chǔ)C語言編程351.2認(rèn)識(shí)ArduinoUNOUNO可以通過兩種方式供電方式:通過

USB供電通過外接6~12V的DC電源。主控板上4個(gè)LED燈和復(fù)位按鍵。ON是電源指示燈,通電就會(huì)亮了。L是接在數(shù)字口13上的一個(gè)LED,在下面一節(jié)會(huì)有個(gè)樣例來說明的。TX、RX是串口通訊指示燈,比如在下載程序的過程中,這兩個(gè)燈就會(huì)不停閃爍。2025/2/27Arduino零基礎(chǔ)C語言編程361.2.1下載ArduinoIDE打開網(wǎng)頁輸入網(wǎng)址http://arduino.cc/en/Main/Software,進(jìn)入到頁面后,找到下圖顯示部分,下載最新版本。Windows用戶,點(diǎn)擊下載Windows(ZIPfile),如果Mac,Linux用戶則選擇相應(yīng)的系統(tǒng)。下載完成后,解壓文件,把整個(gè)Arduino1.8.5文件夾放到電腦熟悉的位置,便于之后查找。2025/2/27Arduino零基礎(chǔ)C語言編程371.2.2安裝驅(qū)動(dòng)把USB一端插到ArduinoUNO上,另一端連到電腦。連接成功后,UNO板的紅色電源指示燈ON亮起。然后,打開控制面板,選擇設(shè)備管理器。

2025/2/27Arduino零基礎(chǔ)C語言編程38找到其它設(shè)備>Arduino-xx,

右擊選擇更新驅(qū)動(dòng)程序軟件。2025/2/27Arduino零基礎(chǔ)C語言編程39在彈出的對話框中選擇下面一項(xiàng)->手動(dòng)查找并安裝驅(qū)動(dòng)程序軟件。2025/2/27Arduino零基礎(chǔ)C語言編程40打開到ArduinoIDE安裝位置,就是上面那個(gè)解壓文件的位置,選擇搜索路徑到drivers,點(diǎn)擊下一步。選擇始終安裝此驅(qū)動(dòng)程序軟件,直至完成。2025/2/27Arduino零基礎(chǔ)C語言編程41出現(xiàn)下圖,說明驅(qū)動(dòng)安裝成功。2025/2/27Arduino零基礎(chǔ)C語言編程42此時(shí),設(shè)備管理器端口會(huì)顯示一個(gè)串口號(hào)。2025/2/27Arduino零基礎(chǔ)C語言編程431.2.3 認(rèn)識(shí)ArduinoIDE打開ArudinoIDE,就會(huì)出現(xiàn)ArduinoIDE的編輯界面。2025/2/27Arduino零基礎(chǔ)C語言編程44如果英文界面不太習(xí)慣的話,可以先更改為中文界面。選擇菜單欄FilePreferences,會(huì)跳出下面這個(gè)對話框,選擇Editorlanguage簡體中文,點(diǎn)擊OK。2025/2/27Arduino零基礎(chǔ)C語言編程45ArduinoIDE基本也只需要用到右圖標(biāo)示出來的部分就可以了,右圖大部分的白色區(qū)域就是代碼的編輯區(qū),用來輸入代碼的。注意,輸入代碼時(shí),要切換到英文輸入法的模式。下面黑色的區(qū)域是消息提示區(qū),會(huì)顯示編譯或者下載是否通過。2025/2/27Arduino零基礎(chǔ)C語言編程461.2.4 下載一個(gè)Blink程序下載一個(gè)最簡單的代碼,既可以熟悉下載程序的整個(gè)過程,同時(shí)也測試下板子好壞。UNO板上標(biāo)有L的LED。這段測試代碼就是讓下圖中的LED燈閃爍。2025/2/27Arduino零基礎(chǔ)C語言編程47插上USB線,打開ArduinoIDE后,找到“Blink”代碼。2025/2/27Arduino零基礎(chǔ)C語言編程48通常,寫完一段代碼后都需要校驗(yàn)一下,看看代碼有沒有錯(cuò)誤。點(diǎn)擊“校驗(yàn)”。

下圖顯示了正在校驗(yàn)中。

校驗(yàn)完畢!

2025/2/27Arduino零基礎(chǔ)C語言編程49在下載程序之前,還要先告訴ArduinoIDE板子型號(hào)以及相應(yīng)的串口。選擇所用的板卡Board->ArduinoUNO。2025/2/27Arduino零基礎(chǔ)C語言編程50選擇當(dāng)前的串口——COM口。

最后,點(diǎn)擊“下載”。

下載完畢!

以上就是給Arduino下載程序一個(gè)blink程序的整個(gè)過程。以后程序下載就照著這個(gè)步驟做就可以了,再理一下思路,分為三步走:

校驗(yàn)->選擇boards和com->下載!2025/2/27Arduino零基礎(chǔ)C語言編程51第二章Arduino語法基礎(chǔ)Arduino零基礎(chǔ)C語言編程522025/2/272.1程序結(jié)構(gòu)在Arduino中,標(biāo)準(zhǔn)的程序入口main函數(shù)在內(nèi)部被定義,用戶只需要關(guān)心以下兩個(gè)函數(shù):(1)setup()當(dāng)Arduino板起動(dòng)時(shí)setup()函數(shù)會(huì)被調(diào)用。用它來初始化變量,引腳模式,開始使用某個(gè)庫,等等。該函數(shù)在Arduino板的每次上電和復(fù)位時(shí)只運(yùn)行一次。(2)loop()在創(chuàng)建setup函數(shù),該函數(shù)初始化和設(shè)置初始值,loop()函數(shù)所做事的正如其名,連續(xù)循環(huán),允許程序改變狀態(tài)和響應(yīng)事件。可以用它來實(shí)時(shí)控制arduino板。Arduino零基礎(chǔ)C語言編程532025/2/27示例:intbuttonPin=3;voidsetup(){Serial.begin(9600);//初始化串口pinMode(buttonPin,INPUT);//設(shè)置3號(hào)引腳為輸入模式}voidloop(){if(digitalRead(buttonPin)==HIGH)serialWrite('H');

elseserialWrite('L');delay(1000);}Arduino零基礎(chǔ)C語言編程542025/2/272.2控制語句(1)選擇結(jié)構(gòu)

a.if結(jié)構(gòu)

:用于與比較運(yùn)算符結(jié)合使用,測試是否已達(dá)到某些條件if(x>120)digitalWrite(LEDpin,HIGH);//格式1

if(x>120)digitalWrite(LEDpin,HIGH);//格式2

if(x>120){digitalWrite(LEDpin,HIGH);}//格式3

if(x>120){//格式4digitalWrite(LEDpin1,HIGH);digitalWrite(LEDpin2,HIGH);}//以上格式都是正確的Arduino零基礎(chǔ)C語言編程552025/2/27b.if...else結(jié)構(gòu)

與基本的if語句相比,由于允許多個(gè)測試組合在一起,if/else可以使用更多的控制流。if(pinFiveInput<500){//動(dòng)作A}else{//動(dòng)作B}Arduino零基礎(chǔ)C語言編程562025/2/27注意:一個(gè)elseif語句塊可能有或者沒有終止else語句塊,同理。每個(gè)elseif分支允許有無限多個(gè)。if(pinFiveInput<500){//執(zhí)行動(dòng)作A}elseif(pinFiveInput>=1000){//執(zhí)行動(dòng)作B}else{//執(zhí)行動(dòng)作C}另外一種表達(dá)互斥分支測試的方式,是使用switchcase語句。2025/2/27Arduino零基礎(chǔ)C語言編程57c.switchcase結(jié)構(gòu)語法:switch(var){//var:與不同的case中的值進(jìn)行比較的變量caselabel://label:相應(yīng)的case的值//statementsbreak;caselabel://statementsbreak;default://statements}break關(guān)鍵字將中止并跳出switch語句段,常常用于每個(gè)case語句的最后面。如果沒有break語句,switch語句將繼續(xù)執(zhí)行下面的表達(dá)式(“持續(xù)下降”)直到遇到break,或者是到達(dá)switch語句的末尾。2025/2/27Arduino零基礎(chǔ)C語言編程58(2)循環(huán)結(jié)構(gòu)a.for結(jié)構(gòu)for語句用于重復(fù)執(zhí)行被花括號(hào)包圍的語句塊。一個(gè)增量計(jì)數(shù)器通常被用來遞增和終止循環(huán)。for語句對于任何需要重復(fù)的操作是非常有用的。常常用于與數(shù)組聯(lián)合使用以收集數(shù)據(jù)/引腳。for循環(huán)的頭部有三個(gè)部分:for(初始化部分;條件判斷部分;數(shù)據(jù)遞增部分){//語句塊}初始化部分被第一個(gè)執(zhí)行,且只執(zhí)行一次。每次通過這個(gè)循環(huán),條件判斷部分將被測試;如果為真,語句塊和數(shù)據(jù)遞增部分就會(huì)被執(zhí)行,然后條件判斷部分就會(huì)被再次測試,當(dāng)條件測試為假時(shí),結(jié)束循環(huán)。2025/2/27Arduino零基礎(chǔ)C語言編程59示例://使用一個(gè)PWM引腳使LED燈閃爍intPWMpin=10;//LED在10號(hào)引腳串聯(lián)一個(gè)470歐姆的電阻

voidsetup(){//這里無需設(shè)置}voidloop(){for(inti=0;i<=255;i++){analogWrite(PWMpin,i);delay(10);}}2025/2/27Arduino零基礎(chǔ)C語言編程60編碼提示:C中的for循環(huán)比在其它計(jì)算機(jī)語言中發(fā)現(xiàn)的for循環(huán)要靈活的多。三個(gè)頭元素中的任何一個(gè)或全部可能被省略,盡管分號(hào)是必須的。而且初始化部分、條件判斷部分和數(shù)據(jù)遞增部分可以是任何合法的使用任意變量的C語句。且可以使用任何數(shù)據(jù)類型包括floats。這些不常用的類型用于語句段也許可以為一些罕見的編程問題提供解決方案。例如,在遞增部分中使用一個(gè)乘法將形成對數(shù)級(jí)增長:for(intx=2;x<100;x=x*1.5){ println(x);}輸出:2,3,4,6,9,13,19,28,42,63,94另一個(gè)例子,在一個(gè)for循環(huán)中使一個(gè)LED燈漸漸地變亮和變暗:voidloop(){intx=1;for(inti=0;i>-1;i=i+x){analogWrite(PWMpin,i);if(i==255)x=-1;//在峰值切換方向delay(10);}2025/2/27Arduino零基礎(chǔ)C語言編程61b.While結(jié)構(gòu)語法:while(expression){//expression-一個(gè)(布爾型)C語句,被求值為真或假//statement(s)}while循環(huán)將會(huì)連續(xù)地?zé)o限地循環(huán),直到圓括號(hào)()中的表達(dá)式變?yōu)榧?。被測試的變量必須被改變,否則while循環(huán)將永遠(yuǎn)不會(huì)中止。這可以是代碼,比如一個(gè)遞增的變量,或者是一個(gè)外部條件,比如測試一個(gè)傳感器。示例:var=0;while(var<200){//做兩百次重復(fù)的事情var++;}2025/2/27Arduino零基礎(chǔ)C語言編程62c.do...while結(jié)構(gòu)語法:do{//語句塊}while(測試條件);do循環(huán)與while循環(huán)使用相同方式工作,不同的是條件是在循環(huán)的末尾被測試的,所以do循環(huán)總是至少會(huì)運(yùn)行一次。示例:do{delay(50);//等待傳感器穩(wěn)定x=readSensors();//檢查傳感器的值}while(x<100);2025/2/27Arduino零基礎(chǔ)C語言編程63(3)跳轉(zhuǎn)語句a.break語句break用于中止do,for,或while循環(huán),繞過正常的循環(huán)條件。它也用于中止switch語句。示例:for(x=0;x<255;x++){digitalWrite(PWMpin,x);sens=analogRead(sensorPin);if(sens>threshold){//bailoutonsensordetectx=0;break;}delay(50);}2025/2/27Arduino零基礎(chǔ)C語言編程64b.continue語句continue語句跳過一個(gè)循環(huán)的當(dāng)前迭代的余下部分。(do,for,或while)。通過檢查循環(huán)測試條件它將繼續(xù)進(jìn)行隨后的迭代。示例:for(x=0;x<255;x++){if(x>40&&x<120){//createjumpinvaluescontinue;}

digitalWrite(PWMpin,x);delay(50);}

2025/2/27Arduino零基礎(chǔ)C語言編程65c.return語句語法:return;returnvalue;//value:任何類型的變量或常量

終止一個(gè)函數(shù),并向被調(diào)用函數(shù)并返回一個(gè)值。示例://一個(gè)函數(shù),用于對一個(gè)傳感器輸入與一個(gè)閾值進(jìn)行比較intcheckSensor(){if(analogRead(0)>400){return1;else{return0;}}return關(guān)鍵字對測試一段代碼很方便,不需“注釋掉”大段的可能是錯(cuò)誤的代碼。voidloop(){//在此測試代碼是個(gè)好想法return;//這里是功能不正常的代碼//這里的代碼永遠(yuǎn)也不會(huì)執(zhí)行}2025/2/27Arduino零基礎(chǔ)C語言編程66d.goto語句語法:label:gotolabel;//在程序中轉(zhuǎn)移程序流到一個(gè)標(biāo)記點(diǎn)提示:在C程序中不建議使用goto,而且一些C編程書的作者主張永遠(yuǎn)不要使用goto語句,但是明智地使用它可以簡化某些代碼。許多程序員不贊成使用goto的原因是,無節(jié)制地使用goto語句很容易產(chǎn)生執(zhí)行流混亂的很難被調(diào)試程序。盡管如是說,仍然有很多使用goto語句而大大簡化編碼的實(shí)例。其中之一就是從一個(gè)很深的循環(huán)嵌套中跳出去,或者是if邏輯塊,在某些條件下。示例:for(byter=0;r<255;r++){for(byteg=255;g>-1;g--){for(byteb=0;b<255;b++){if(analogRead(0)>250){gotobailout;}//其它語句。。。}}}bailout:2025/2/27Arduino零基礎(chǔ)C語言編程672.3相關(guān)語法(1)分號(hào)示例: inta=13;//用于一個(gè)語句的結(jié)束提示:忘記在一行的末尾加一個(gè)分號(hào)將產(chǎn)生一個(gè)編譯器錯(cuò)誤。該錯(cuò)誤信息可能是明顯的,且會(huì)提及丟失分號(hào),但也許不會(huì)。如果出現(xiàn)一個(gè)不可理喻的或看起來不合邏輯的錯(cuò)誤,其中一個(gè)首先要做的事就是檢查分號(hào)丟失。編譯器會(huì)在前一行的附近發(fā)出抱怨。Arduino零基礎(chǔ)C語言編程682025/2/27(2)大括號(hào)大括號(hào)(又稱括弧或花括號(hào))是C語言的主要組成部分。一個(gè)左大括號(hào)必須有一個(gè)右大括號(hào)跟在后面。這是一個(gè)常被稱為平衡括號(hào)的條件。ArduinoIDE(集成開發(fā)環(huán)境)包含一個(gè)方便的特性以檢驗(yàn)平衡大括號(hào)。只需選擇一個(gè)大括號(hào),甚至直接在一個(gè)大括號(hào)后面點(diǎn)擊插入點(diǎn),然后它的邏輯上的同伴就會(huì)高亮顯示。2025/2/27Arduino零基礎(chǔ)C語言編程69(3)注釋注釋是程序中的一些行,用于讓自己或他人了解程序的工作方式。它們會(huì)被編譯器忽略,而不會(huì)輸出到控制器,所以它們不會(huì)占用Atmega芯片上的任何空間。注釋唯一的目的是幫助理解(或記憶)程序是怎樣工作的,或者是告知其他人程序是怎樣工作的。標(biāo)記一行為注釋只有兩種方式:(1)x=5;//這是一個(gè)單行注釋。此斜線后的任何內(nèi)容都是注釋//直到該行的結(jié)尾

(2)/*這是多行注釋-用它來注釋掉整個(gè)代碼塊if(gwb==0){//在多行注釋中使用單行注釋是沒有問題的x=3;/*但是其中不可以使用另一個(gè)多行注釋-這是不合法的*/}//別忘了加上“關(guān)閉”注釋符-它們必須是平衡的*/2025/2/27Arduino零基礎(chǔ)C語言編程70(4)define宏定義宏定義是一個(gè)有用的C組件,它允許程序員在程序編譯前給常量取一個(gè)名字。在arduino中定義的常量不會(huì)在芯片中占用任何程序空間。編譯器在編譯時(shí)會(huì)將這些常量引用替換為定義的值。Arduino宏定義與C宏定義有同樣的語法語法:#defineconstantNamevalue注意:‘#’是必須的示例:#defineledPin3//編譯器在編譯時(shí)會(huì)將任何提及l(fā)edPin的地方替換成數(shù)值3。提示:#define語句的后面分號(hào)。如果加了一個(gè),編譯器將會(huì)在進(jìn)一步的頁面引發(fā)奇怪的錯(cuò)誤。#defineledPin3;//錯(cuò)誤類似地,包含一個(gè)等號(hào)通常也會(huì)在進(jìn)一步的頁面引發(fā)奇怪的編譯錯(cuò)誤。#defineledPin=3//錯(cuò)誤2025/2/27Arduino零基礎(chǔ)C語言編程71(5)include#include用于在sketch中包含外部的庫。這使程序員可以訪問一個(gè)巨大的標(biāo)準(zhǔn)C庫(預(yù)定義函數(shù)集合)的集合。注意#include和#define相似,沒有分號(hào)終止符,且如果加了,編譯器會(huì)產(chǎn)生奇怪的錯(cuò)誤信息。示例:該示例包含一個(gè)用于輸出數(shù)據(jù)到程序空間閃存的庫,而不是內(nèi)存。這會(huì)為動(dòng)態(tài)內(nèi)存需求節(jié)省存儲(chǔ)空間且使需要?jiǎng)?chuàng)建巨大的查找表變得更實(shí)際。#include<avr/pgmspace.h>prog_uint16_tmyConstants[]PROGMEM={0,21140,702,9128,0,25764,8456,0,0,0,0,0,0,0,0,29810,8968,29762,29762,4500};2025/2/27Arduino零基礎(chǔ)C語言編程722.4運(yùn)算符(1)算術(shù)運(yùn)算符a.賦值=賦值運(yùn)算符(單個(gè)等號(hào))在C語言中單個(gè)等號(hào)被稱為賦值運(yùn)算符。它與在代數(shù)課中的意義不同,后者象征等式或相等。賦值運(yùn)算符告訴微控制器求值等號(hào)右邊的變量或表達(dá)式,然后把結(jié)果存入等號(hào)左邊的變量中。intsensVal;//聲明一個(gè)名為sensVal的整型變量senVal=analogRead(0);//存儲(chǔ)(數(shù)字的)0號(hào)模擬引腳的輸入電壓值到sensVal賦值運(yùn)算符(=號(hào))左邊的變量需要能夠保存存儲(chǔ)在其中的值。如果它不足以大到容納一個(gè)值,那個(gè)存儲(chǔ)在該變量中的值將是錯(cuò)誤的。不要混淆賦值運(yùn)算符[=](單個(gè)等號(hào))和比較運(yùn)算符[==](雙等號(hào)),后者求值兩個(gè)表達(dá)式是否相等。Arduino零基礎(chǔ)C語言編程732025/2/27b.加,減,乘,除這些運(yùn)算符(分別)返回運(yùn)算對象的和,差,積,商。這些操作受運(yùn)算對象的數(shù)據(jù)類型的影響。所以,例如,9/4結(jié)果是2,如果9和2是整型數(shù)。這也意味著運(yùn)算會(huì)溢出,如果結(jié)果超出其在相應(yīng)的數(shù)據(jù)類型下所能表示的數(shù)。(例如,給整型數(shù)值32767加1結(jié)果是-32768)。如果運(yùn)算對象是不同的類型,會(huì)用那個(gè)較大的類型進(jìn)行計(jì)算。如果其中一個(gè)數(shù)字(運(yùn)算符)是float類型或double類型,將采用浮點(diǎn)數(shù)進(jìn)行計(jì)算。語法:result=value1+value2;result=value1-value2;result=value1*value2;result=value1/value2;Arduino零基礎(chǔ)C語言編程742025/2/27示例:y=y+3;x=x-7;i=j*6;r=r/5;c.取模%計(jì)算一個(gè)數(shù)除以另一個(gè)數(shù)的余數(shù)。這對于保持一個(gè)變量在一個(gè)特定的范圍很有用(例如:數(shù)組的大?。UZ法

:result=dividend

%divisor示例代碼:intvalues[10];inti=0;voidsetup(){}voidloop(){values[i]=analogRead(0);i=(i+1)

%10;//modulooperatorrollsovervariable}提示:取模運(yùn)算符不能用于浮點(diǎn)型數(shù)。Arduino零基礎(chǔ)C語言編程752025/2/27示例:x=7

%5;//xnowcontains2x=9

%5;//xnowcontains4x=5

%5;//xnowcontains0x=4

%5;//xnowcontains4(2)比較運(yùn)算符==,

!=,<,>,>=,<=比較運(yùn)算符一般和if語句聯(lián)合使用,測試某一條件是否到達(dá),例如一個(gè)輸入超出某一數(shù)值。if(x>120)digitalWrite(LEDpin,HIGH);

if(x>120)digitalWrite(LEDpin,HIGH);

if(x>120){digitalWrite(LEDpin,HIGH);}

if(x>120){digitalWrite(LEDpin1,HIGH);digitalWrite(LEDpin2,HIGH);}

//allarecorrectArduino零基礎(chǔ)C語言編程762025/2/272025/2/27Arduino零基礎(chǔ)C語言編程77(3)比較運(yùn)算符==,

!=,<,>a.&&(邏輯與)只有在兩個(gè)操作數(shù)都為真時(shí)才返回真,例如:if(digitalRead(2)==HIGH&&digitalRead(3)==HIGH){//readtwoswitches//...}只在兩個(gè)輸入都為高時(shí)返回真。b.||(邏輯或)任意一個(gè)為真時(shí)返回真,例如:if(x>0||y>0){//...}x或y任意一個(gè)大于0時(shí)返回真c.!(非)當(dāng)操作數(shù)為假時(shí)返回真,例如:if(!x){//...}若x為假返回真(即如果x等于0)2025/2/27Arduino零基礎(chǔ)C語言編程78(4)位運(yùn)算按位與(&)規(guī)則:

0011operand10101operand2----------0001(operand1&operand2)-returnedresult示例:

inta=92;//inbinary:0000000001011100intb=101;//inbinary:0000000001100101intc=a&b;//result:0000000001000100,or68indecimal.2025/2/27Arduino零基礎(chǔ)C語言編程79(4)位運(yùn)算b.按位或(|)規(guī)則:

0011operand10101operand2----------0111(operand1|operand2)-returnedresult示例:

inta=92;//inbinary:0000000001011100intb=101;//inbinary:0000000001100101intc=a|b;//result:0000000001111101,or125indecimal.2025/2/27Arduino零基礎(chǔ)C語言編程80(4)位運(yùn)算c.按位異或(^)規(guī)則:

0011operand10101operand2----------0110(operand1^operand2)-returnedresult“^”運(yùn)算符常用于翻轉(zhuǎn)整數(shù)表達(dá)式的某些位(例如從0變?yōu)?,或從1變?yōu)?)。在一個(gè)按位異或操作中,如果相應(yīng)的掩碼位為1,該位將翻轉(zhuǎn),如果為0,該位不變。以下是一個(gè)閃爍引腳5的程序。//Blink_Pin_5//demoforExclusiveORvoidsetup(){DDRD=DDRD|B00100000;//setdigitalpinfiveasOUTPUTSerial.begin(9600);}voidloop(){PORTD=PORTD^B00100000;//invertbit5(digitalpin5),leaveothersuntoucheddelay(100);}2025/2/27Arduino零基礎(chǔ)C語言編程81(4)位運(yùn)算d.按位取反(~)規(guī)則:

按位取反操作會(huì)翻轉(zhuǎn)其每一位。0變?yōu)?,1變?yōu)?。例如:01operand1----------10~operand1

inta=103;//binary:0000000001100111intb=~a;//binary:1111111110011000=-104e.左移運(yùn)算(<<),右移運(yùn)算(>>)inta=5;//binary:0000000000000101intb=a<<3;//binary:0000000000101000,or40indecimalintc=b>>3;//binary:0000000000000101,orbackto5likewestartedwith當(dāng)把x左移y位(x<<y),x中最左邊的y位將會(huì)丟失。inta=5;//binary:0000000000000101intb=a<<14;//binary:0100000000000000-101中的第一個(gè)1被丟棄2025/2/27Arduino零基礎(chǔ)C語言編程82(5)復(fù)合運(yùn)算符自加

++i++;//相當(dāng)于

i=i+1;自減

--i--;//相當(dāng)于

i=i-1;復(fù)合加+=i+=5;//相當(dāng)于

i=i+5;復(fù)合減-=i-=5;//相當(dāng)于i=i-5;復(fù)合乘*=i*=5;//相當(dāng)于

i=i*5;復(fù)合除/=i/=5;//相當(dāng)于

i=i/5;復(fù)合與&=i&=5;//相當(dāng)于

i=i&5;復(fù)合或|=i|=5;//相當(dāng)于

i=i|5;2.5變量1.常量constants是在Arduino語言里預(yù)定義的變量。它們被用來使程序更易閱讀。一般按組將常量分類。在Arduino內(nèi)有兩個(gè)常量用來表示真和假:true和false。需要注意的是true和false常量,不同于HIGH,LOW,INPUT和OUTPUT,需要全部小寫。(1)HIGHHIGH(參考引腳)的含義取決于引腳(pin)的設(shè)置,引腳定義為INPUT或OUTPUT時(shí)含義有所不同。當(dāng)一個(gè)引腳通過pinMode被設(shè)置為INPUT,并通過digitalRead讀?。╮ead)時(shí)。如果當(dāng)前引腳的電壓大于等于3V,微控制器將會(huì)返回為HIGH。引腳也可以通過pinMode被設(shè)置為INPUT,并通過digitalWrite設(shè)置為HIGH。輸入引腳的值將被一個(gè)內(nèi)在的20K上拉電阻控制在HIGH上,除非一個(gè)外部電路將其拉低到LOW。當(dāng)一個(gè)引腳通過pinMode被設(shè)置為OUTPUT,并digitalWrite設(shè)置為HIGH時(shí),引腳的電壓應(yīng)在5V。在這種狀態(tài)下,它可以輸出電流。例如,點(diǎn)亮一個(gè)通過一串電阻接地或設(shè)置為LOW的OUTPUT屬性引腳的LED。Arduino零基礎(chǔ)C語言編程832025/2/272.5變量1.常量(2)LOWLOW的含義同樣取決于引腳設(shè)置,引腳定義為INPUT或OUTPUT時(shí)含義有所不同。當(dāng)一個(gè)引腳通過pinMode配置為INPUT,通過digitalRead設(shè)置為讀?。╮ead)時(shí),如果當(dāng)前引腳的電壓小于等于2V,微控制器將返回為LOW。當(dāng)一個(gè)引腳通過pinMode配置為OUTPUT,并通過digitalWrite設(shè)置為LOW時(shí),引腳為0V。在這種狀態(tài)下,它可以倒灌電流。例如,點(diǎn)亮一個(gè)通過串聯(lián)電阻連接到+5V,或到另一個(gè)引腳配置為OUTPUT、HIGH的LED。(3)整型常量整數(shù)常量是直接在程序中使用的數(shù)字,如123。默認(rèn)情況下,這些數(shù)字被視為int,但可以通過U和L修飾符進(jìn)行更多的限制。通常情況下,整數(shù)常量默認(rèn)為十進(jìn)制,但可以加上特殊前綴表示為其他進(jìn)制。進(jìn)制

例子

格式

備注10(十進(jìn)制) 123 無

2(二進(jìn)制) B1111011 前綴'B' 只適用于8位的值(0到255)字符0-1有效8(八進(jìn)制) 0173 前綴”0” 字符0-7有效16(十六進(jìn)制) 0x7B 前綴”0x” 字符0-9,A-F,A-F有效Arduino零基礎(chǔ)C語言編程842025/2/272.5變量1.常量(4)浮點(diǎn)數(shù)常量和整型常量類似,浮點(diǎn)常量可以使得代碼更具可讀性。浮點(diǎn)常量在編譯時(shí)被轉(zhuǎn)換為其表達(dá)式所取的值。浮點(diǎn)數(shù)可以用科學(xué)記數(shù)法表示。'E'和'e'都可以作為有效的指數(shù)標(biāo)志。浮點(diǎn)數(shù)

被轉(zhuǎn)換為

被轉(zhuǎn)換為10.0 102.34E5 2.34*10^5 23400067E-12 67.0*10^-12 0.000000000067Arduino零基礎(chǔ)C語言編程852025/2/272.5變量2.數(shù)據(jù)類型(1)void(2)boolean:布爾(3)char:字節(jié)(4)unsignedchar:無符號(hào)字符(5)byte:字節(jié)型(6)int:整型(7)unsignedint:無符號(hào)整型(8)word:字(9)long:長整型(10)unsignedlong(11)float:單精度浮點(diǎn)型(12)double:雙精度浮點(diǎn)型(13)string:字符串Arduino零基礎(chǔ)C語言編程862025/2/272.5變量2.數(shù)據(jù)類型(14)String(c++)字符串?dāng)?shù)組都用小寫的string表示而String類的實(shí)例通常用大寫的String表示。注意,在“雙引號(hào)”內(nèi)指定的字符常量通常被作為字符數(shù)組,并非String類實(shí)例。常用函數(shù)有:StringcharAt()compareTo()concat()endsWith()equals()equalsIgnoreCase()GetBytes()indexOf()lastIndexOflengthArduino零基礎(chǔ)C語言編程872025/2/27replace()setCharAt()startsWith()substring()toCharArray()toLowerCase()toUpperCase()trim()2.5變量2.數(shù)據(jù)類型(15)array下面的方法都可以用來創(chuàng)建(聲明)數(shù)組。//聲明一個(gè)未初始化數(shù)組myInts[6];//在數(shù)組myPins中,聲明了一個(gè)沒有明確大小的數(shù)組。編譯器將會(huì)計(jì)算元素的大小,并創(chuàng)建一個(gè)適當(dāng)大小的數(shù)組。myPins[]={2,4,8,3,6};//當(dāng)然,也可以初始化數(shù)組的大小,例如在mySensVals中。mySensVals[6]={2,4,-8,3,2};//注意,當(dāng)聲明一個(gè)char類型的數(shù)組時(shí),初始化的大小必須大于元素的個(gè)數(shù),以容納所需的空字符。charmessage[6]="hello";數(shù)組是從零開始索引的,也就說,上面所提到的數(shù)組初始化,數(shù)組第一個(gè)元素是為索引0,因此:mySensVals[0]==2,mySensVals[1]==4,依此類推。這也意味著,在包含十個(gè)元素的數(shù)組中,索引9是最后一個(gè)元素。因此,intmyArray[10]={9,3,2,4,3,2,7,8,9,11};//myArray[9]的數(shù)值為11Arduino零基礎(chǔ)C語言編程882025/2/272.5變量3.數(shù)據(jù)類型轉(zhuǎn)換Arduino零基礎(chǔ)C語言編程892025/2/27描述語法參數(shù)返回將一個(gè)變量的類型變?yōu)閏harchar(x)x:任何類型的值Char將一個(gè)值轉(zhuǎn)換為字節(jié)型數(shù)值byte(x)X:任何類型的值字節(jié)將一個(gè)值轉(zhuǎn)換為int類型int(x)X:任何類型的值int把一個(gè)值轉(zhuǎn)換為word數(shù)據(jù)類型的值,或由兩個(gè)字節(jié)創(chuàng)建一個(gè)字符word(x)word(h,l)X:任何類型的值H:高階(最左邊)字節(jié)L:低序(最右邊)字節(jié)字符將一個(gè)值轉(zhuǎn)換為長整型數(shù)據(jù)類型long(x)x:任意類型的數(shù)值長整型數(shù)將一個(gè)值轉(zhuǎn)換為float型數(shù)值float(x)X:任何類型的值float型數(shù)2.5變量4.變量作用域&修飾符(1)static(靜態(tài)變量)(2)volatile(易變變量)(3)const(不可改變變量)5.輔助工具sizeof()Arduino零基礎(chǔ)C語言編程902025/2/27語法參數(shù)sizeof(variable)variable:任何變量類型或數(shù)組(如int,float,byte)2.6基本函數(shù)數(shù)字I/O(1)pinMode():設(shè)置引腳格式:voidpinMode(uint8_tpin,uint8_tmode)作用:配置引腳為輸出或輸出模式。參數(shù):pin引腳編號(hào)mode:INPUT,OUTPUT,或INPUT_PULLUP示例:intledPin=13;//LEDconnectedtodigitalpin13

voidsetup(){pinMode(ledPin,OUTPUT);//setsthedigitalpinasoutput}

voidloop(){digitalWrite(ledPin,HIGH);//setstheLEDondelay(1000);//waitsforaseconddigitalWrite(ledPin,LOW);//setstheLEDoffdelay(1000);//waitsforasecond}注解:模擬引腳也可以當(dāng)作數(shù)字引腳使用,編號(hào)為14(對應(yīng)模擬引腳0)到19(對應(yīng)模擬引腳5)。Arduino零基礎(chǔ)C語言編程912025/2/272.6基本函數(shù)(2)digitalWrite():寫數(shù)字引腳

格式:voiddigitalWrite(uint8_tpin,uint8_tvalue)作用:寫數(shù)字引腳,對應(yīng)引腳的高低電平.在寫引腳之前,需要將引腳設(shè)置為OUTPUT模式。參數(shù):pin引腳編號(hào)valueHIGH或LOW示例:intledPin=13;//LEDconnectedtodigitalpin13

voidsetup(){pinMode(ledPin,OUTPUT);//setsthedigitalpinasoutput}

voidloop(){digitalWrite(ledPin,HIGH);//點(diǎn)亮LEDdelay(1000);//等待1秒digitalWrite(ledPin,LOW);//關(guān)delay(1000);//waitsforasecond}Arduino零基礎(chǔ)C語言編程922025/2/272.6基本函數(shù)(3)digitalRead():讀數(shù)字引腳

格式:intdigitalRead(uint8_tpin) 作用:讀數(shù)字引腳,返回引腳的高低電平.在讀引腳之前,需要將引腳設(shè)置為INPUT模式。參數(shù):pin引腳編號(hào)返回值:HIGH或LOW示例:intledPin=13;//LEDconnectedtodigitalpin13intinPin=7;//pushbuttonconnectedtodigitalpin7intval=0;//variabletostorethereadvalue

voidsetup(){pinMode(ledPin,OUTPUT);//setsthedigitalpin13asoutputpinMode(inPin,INPUT);//setsthedigitalpin7asinput}

voidloop(){val=digitalRead(inPin);//readtheinputpindigitalWrite(ledPin,val);//setstheLEDtothebutton'svalue}注解:

如果引腳沒有鏈接到任何地方,那么將隨機(jī)返回HIGH或LOW.Arduino零基礎(chǔ)C語言編程932025/2/272.6基本函數(shù)2.模擬I/O(1)analogReference():配置參考電壓

格式:voidanalogReference(uint8_ttype)作用:配置模式引腳的參考電壓。函數(shù)analogRead在讀取模擬值之后,將根據(jù)參考電壓將模擬值轉(zhuǎn)換到[0,1023]區(qū)間。有以下類型:DEFAULT:默認(rèn)5V。INTERNAL:低功耗模式。ATmega168和ATmega8對應(yīng)1.1V到2.56V。EXTERNAL:擴(kuò)展模式。通過AREF引腳獲取參考電壓。參數(shù):type參考類型(DEFAULT/INTERNAL/EXTERNAL)Arduino零基礎(chǔ)C語言編程942025/2/272.6基本函數(shù)2.模擬I/O(2)analogRead():讀模擬引腳格式:intanalogRead(uint8_tpin) 作用:讀模擬引腳,每讀一次需要花1微秒的時(shí)間。參數(shù):pin引腳編號(hào)返回值:0到1023之間的值示例:intanalogPin=3;//potentiometerwiper(middleterminal)connectedtoanalogpin3//outsideleadstogroundand+5Vintval=0;//variabletostorethevalueread

voidsetup(){Serial.begin(9600);//setupserial}

voidloop(){val=analogRead(analogPin);//readtheinputpinSerial.println(val);//debugvalue}Arduino零基礎(chǔ)C語言編程952025/2/272.6基本函數(shù)2.模擬I/O(3)analogWrite():寫模擬引腳格式:voidanalogWrite(uint8_tpin,intvalue)作用:寫一個(gè)模擬值(PWM)到引腳。可以用來控制LED的亮度,或者控制電機(jī)的轉(zhuǎn)速。在執(zhí)行該操作后,應(yīng)該等待一定時(shí)間后才能對該引腳進(jìn)行下一次的讀或?qū)懖僮?。PWM的頻率大約為490Hz。在一些基于ATmega168的新的Arduino控制板(如Mini和BT)中,該函數(shù)支持以下引腳:3,5,6,9,10,11。在基于ATmega8的型號(hào)中支持9,10,11引腳。參數(shù):pin引腳編號(hào)value0到255之間的值,0對應(yīng)off,255對應(yīng)on示例:intledPin=9;//LEDconnectedtodigitalpin9intanalogPin=3;//potentiometerconnectedtoanalogpin3intval=0;//variabletostorethereadvalue

voidsetup(){pinMode(ledPin,OUTPUT);//setsthepinasoutput}

voidloop(){val=analogRead(analogPin);//readtheinputpinanalogWrite(ledPin,val/4);//analogReadvaluesgofrom0to1023,analogWritevaluesfrom0to255}Arduino零基礎(chǔ)C語言編程962025/2/272.6基本函數(shù)3.高級(jí)I/O(1)shiftOut():位移輸出函數(shù)格式:voidshiftOut(uint8_tdataPin,uint8_tclockPin,uint8_tbitOrder,byteval)作用:輸入val數(shù)據(jù)后Arduino會(huì)自動(dòng)把數(shù)據(jù)移動(dòng)分配到8個(gè)并行輸出端。其中dataPin為連接DS的引腳號(hào),clockPin為連接SH_CP的引腳號(hào),bitOrder為設(shè)置數(shù)據(jù)位移順序,分別為高位先入MSBFIRST或者低位先入LSBFIRST。參數(shù):dataPin數(shù)據(jù)引腳clockPin時(shí)鐘引腳bitOrder移位順序(MSBFIRST或LSBFIRST)val數(shù)據(jù)示例://DothisforMSBFIRSTserialintdata=500;//shiftouthighbyteshiftOut(dataPin,clock,MSBFIRST,(data>>8));//shiftoutlowbyteshiftOut(dataPin,clock,MSBFIRST,data);

//OrdothisforLSBFIRSTserialdata=500;//shiftoutlowbyteshiftOut(dataPin,clock,LSBFIRST,data);//shiftouthighbyteshiftOut(dataPin,clock,LSBFIRST,(data>>8));Arduino零基礎(chǔ)C語言編程972025/2/272.6基本函數(shù)3.高級(jí)I/O(2)pulseIn():讀脈沖格式:unsignedlongpulseIn(uint8_tpin,uint8_tstate,unsignedlongtimeout) 作用:讀引腳的脈沖,脈沖可以是HIGH或LOW。如果是HIGH,函數(shù)將先等引腳變?yōu)楦唠娖?,然后開始計(jì)時(shí),一直到變?yōu)榈碗娖綖橹?。返回脈沖持續(xù)的時(shí)間長短,單位為微秒。如果超時(shí)還沒有讀到的話,將返回0。參數(shù):pin引腳編號(hào)state脈沖狀態(tài)timeout超時(shí)時(shí)間(us)示例:下面的例子演示了統(tǒng)計(jì)高電平的繼續(xù)時(shí)間:intpin=7;unsignedlongduration;

voidsetup(){pinMode(pin,INPUT);}

voidloop(){duration=pulseIn(pin,HIGH);}Arduino零基礎(chǔ)C語言編程982025/2/272.6基本函數(shù)4.時(shí)間(1)millis():毫秒時(shí)間格式:unsignedlongmillis(void)作用:獲取機(jī)器運(yùn)行的時(shí)間長度,單位毫秒。系統(tǒng)最長的記錄時(shí)間接近50天,如果超出時(shí)間將從0開始。注意,時(shí)間為unsignedlong類型,如果用int保存時(shí)間將得到錯(cuò)誤結(jié)果。(2)delay(ms):延時(shí)(毫秒)

格式:voiddelay(unsignedlongms)作用:延時(shí),單位毫秒(1秒有1000毫秒)。(3)delayMicroseconds(us):延時(shí)(微秒)格式:voiddelayMicroseconds(unsignedintus)作用:延時(shí),單位為微妙(1毫秒有1000微妙)。如果延時(shí)的時(shí)間有幾千微妙,那么建議使用delay函數(shù)。目前參數(shù)最大支持16383微秒(不過以后的版本中可能會(huì)變化)。Arduino零基礎(chǔ)C語言編程992025/2/272.6基本函數(shù)5.數(shù)學(xué)庫(1)min():最小值(2)max():最大值(3)abs():求絕對值(4)constrain():調(diào)整到區(qū)間(5)map():等比映射

(6)pow():指數(shù)函數(shù)(7)sqrt():開平方6.三角函數(shù)sin(),cos(),tan()floatsin(floatrad)//正弦函數(shù)

floatcos(floatrad)//余弦函數(shù)

floattan(floatrad)//正切函數(shù)

Arduino零基礎(chǔ)C語言編程1002025/2/272.6基本函數(shù)7.隨機(jī)數(shù):設(shè)置隨機(jī)種子

(1)randomSeed()格式:voidrandomSeed(unsignedintseed)作用:可以用當(dāng)前時(shí)間作為隨機(jī)種子,隨機(jī)種子的設(shè)置對產(chǎn)生的隨機(jī)序列有影響。參數(shù):seed隨機(jī)種子

(2)random():生成隨機(jī)數(shù)

格式1:longrandom(longhowbig)作用:生成[0,howbig-1]范圍的隨機(jī)數(shù)。參數(shù):howbig最大值格式2::longrandom(longhowsmall,longhowbig)作用:生成[howsmall,howbig-1]范圍的隨機(jī)數(shù).參數(shù):howsmall最小值howbig最大值A(chǔ)rduino零基礎(chǔ)C語言編程1012025/2/272.6基本函數(shù)8.隨機(jī)數(shù):設(shè)置隨機(jī)種子

#definelowByte(w)((w)&0xff)//取低字節(jié)

#definehighByte(w)((w)>>8)//取高字節(jié)

#definebitRead(value,bit)(((value)>>(bit))&0x01)//讀一個(gè)bit

#definebitWrite(v

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論