




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第一章 認識Arduino2022/8/221Arduino零基礎 C語言編程1.1 Arduino 是什么?Arduino 是一個開放源碼電子原型平臺,擁有靈活、易用的硬件和軟件。Arduino 可以接收來自各種傳感器的輸入信號從而檢測出運行環(huán)境,并通過控制光源,電機以及其他驅(qū)動器來影響其周圍環(huán)境。板上的微控制器編程使用 Arduino 編程語言(基于 Wiring)和 Arduino 開發(fā)環(huán)境(以 Processing 為基礎)。Arduino 可以獨立運行,也可以與計算機上運行的軟件(例如,F(xiàn)lash,Processing,MaxMSP)進行通信。Arduino開發(fā) IDE 接口基于開放
2、源代碼,可以免費下載使用,開發(fā)出更多令人驚艷的互動作品。2022/8/22Arduino零基礎 C語言編程2有趣的案例寵物喂食器四軸飛行器電視自動消聲器:夠了!(Enough!) 文字炸彈(txtBomber)基于Arduino的智能家居方案tilt radio 使用者通過傾 斜tilt radio來尋找 喜愛的頻道。谷歌“會說話的鞋”這個最經(jīng)典的開源硬件項目,誕生于意大利的一間設計學校。Arduino 的核心開發(fā)團隊成員包括:Massimo Banzi,David Cuartielles,Tom Igoe,Gianluca Martino, David Mellis 和 Nicholas Z
3、ambetti。2022/8/22Arduino零基礎 C語言編程8關于Arduino的名字還有個有趣的由來,意大利北部一個如詩如畫的小鎮(zhèn)Ivrea,橫跨過藍綠色 Dora Baltea 河,它最著名的事跡是關于一位受壓迫的國王。公元 1002 年,國王 Arduino 成為國家的統(tǒng)治者,不幸的是兩年后即被德國亨利二世國王給廢掉了。今日,在這位無法成為新國王的出生地,cobblestone 街上有家叫di Re Arduino的酒吧紀念了這位國王。Massimo Banzi 經(jīng)常光臨這家酒吧,而他將這個電子產(chǎn)品計劃命名為 Aruino 以紀念這個地方。2022/8/22Arduino零基礎 C
4、語言編程91.2 認識 Arduino UNO圖中標出的數(shù)字口和模擬口,即為常說的 I/O。數(shù)字口有 013,模擬口有 05。2022/8/22Arduino零基礎 C語言編程101.2 認識 Arduino UNOUNO 可以通過兩種方式供電方式:通過 USB 供電通過外接 612V 的 DC 電源。主控板上4 個 LED 燈和復位按鍵。ON 是電源指示燈,通電就會亮了。L是接在數(shù)字口 13 上的一個LED,在下面一節(jié)會有個樣例來說明的。TX、RX 是串口通訊指示燈,比如在下載程序的過程中,這兩個燈就會不停閃爍。2022/8/22Arduino零基礎 C語言編程111.2.1 下載 Ardu
5、ino IDE打開網(wǎng)頁輸入網(wǎng)址 http:/arduino.cc/en/Main/Software,進入到頁面后,找到下圖顯示部分,下載最新版本。Windows 用戶,點擊下載 Windows(ZIP file),如果 Mac,Linux 用戶則選擇相應的系統(tǒng)。下載完成后,解壓文件,把整個 Arduino 1.8.5 文件夾放到電腦熟悉的位置,便于之后查找。2022/8/22Arduino零基礎 C語言編程121.2.2 安裝驅(qū)動把 USB 一端插到 Arduino UNO 上,另一端連到電腦。連接成功后,UNO 板的紅色電源指示燈 ON 亮起。然后,打開控制面板,選擇設備管理器。 2022/
6、8/22Arduino零基礎 C語言編程13找到其它設備Arduino-xx, 右擊選擇更新驅(qū)動程序軟件。2022/8/22Arduino零基礎 C語言編程14在彈出的對話框中選擇下面一項 - 手動查找并安裝驅(qū)動程序軟件。2022/8/22Arduino零基礎 C語言編程15打開到 Arduino IDE 安裝位置,就是上面那個解壓文件的位置,選擇搜索路徑到 drivers,點擊下一步。選擇始終安裝此驅(qū)動程序軟件,直至完成。2022/8/22Arduino零基礎 C語言編程16出現(xiàn)下圖,說明驅(qū)動安裝成功。2022/8/22Arduino零基礎 C語言編程17此時,設備管理器端口會顯示一個串口號
7、。2022/8/22Arduino零基礎 C語言編程181.2.3 認識 Arduino IDE打開 Arudino IDE,就會出現(xiàn) Arduino IDE 的編輯界面。2022/8/22Arduino零基礎 C語言編程19如果英文界面不太習慣的話,可以先更改為中文界面。選擇菜單欄 File Preferences,會跳出下面這個對話框,選擇 Editor language 簡體中文,點擊 OK。2022/8/22Arduino零基礎 C語言編程20Arduino IDE 基本也只需要用到右圖標示出來的部分就可以了,右圖大部分的白色區(qū)域就是代碼的編輯區(qū),用來輸入代碼的。注意,輸入代碼時,要切
8、換到英文輸入法的模式。下面黑色的區(qū)域是消息提示區(qū),會顯示編譯或者下載是否通過。2022/8/22Arduino零基礎 C語言編程211.2.4 下載一個 Blink 程序下載一個最簡單的代碼,既可以熟悉下載程序的整個過程,同時也測試下板子好壞。 UNO 板上標有 L 的 LED。這段測試代碼就是讓下圖中的LED燈閃爍。2022/8/22Arduino零基礎 C語言編程22插上 USB 線,打開 Arduino IDE 后,找到“Blink”代碼。2022/8/22Arduino零基礎 C語言編程23通常,寫完一段代碼后都需要校驗一下,看看代碼有沒有錯誤。點擊“校驗”。下圖顯示了正在校驗中。校驗
9、完畢!2022/8/22Arduino零基礎 C語言編程24在下載程序之前,還要先告訴 Arduino IDE 板子型號以及相應的串口。選擇所用的板卡 Board -Arduino UNO。2022/8/22Arduino零基礎 C語言編程25選擇當前的串口COM 口。 最后,點擊“下載”。下載完畢!以上就是給 Arduino 下載程序一個 blink 程序的整個過程。以后程序下載就照著這個步驟做就可以了,再理一下思路,分為三步走: 校驗-選擇 boards 和 com-下載!2022/8/22Arduino零基礎 C語言編程261.1 Arduino 是什么?Arduino 是一個開放源碼電
10、子原型平臺,擁有靈活、易用的硬件和軟件。Arduino 可以接收來自各種傳感器的輸入信號從而檢測出運行環(huán)境,并通過控制光源,電機以及其他驅(qū)動器來影響其周圍環(huán)境。板上的微控制器編程使用 Arduino 編程語言(基于 Wiring)和 Arduino 開發(fā)環(huán)境(以 Processing 為基礎)。Arduino 可以獨立運行,也可以與計算機上運行的軟件(例如,F(xiàn)lash,Processing,MaxMSP)進行通信。Arduino開發(fā) IDE 接口基于開放源代碼,可以免費下載使用,開發(fā)出更多令人驚艷的互動作品。2022/8/22Arduino零基礎 C語言編程27有趣的案例寵物喂食器四軸飛行器電
11、視自動消聲器:夠了!(Enough!) 文字炸彈(txtBomber)基于Arduino的智能家居方案tilt radio 使用者通過傾 斜tilt radio來尋找 喜愛的頻道。谷歌“會說話的鞋”這個最經(jīng)典的開源硬件項目,誕生于意大利的一間設計學校。Arduino 的核心開發(fā)團隊成員包括:Massimo Banzi,David Cuartielles,Tom Igoe,Gianluca Martino, David Mellis 和 Nicholas Zambetti。2022/8/22Arduino零基礎 C語言編程33關于Arduino的名字還有個有趣的由來,意大利北部一個如詩如畫的小鎮(zhèn)
12、Ivrea,橫跨過藍綠色 Dora Baltea 河,它最著名的事跡是關于一位受壓迫的國王。公元 1002 年,國王 Arduino 成為國家的統(tǒng)治者,不幸的是兩年后即被德國亨利二世國王給廢掉了。今日,在這位無法成為新國王的出生地,cobblestone 街上有家叫di Re Arduino的酒吧紀念了這位國王。Massimo Banzi 經(jīng)常光臨這家酒吧,而他將這個電子產(chǎn)品計劃命名為 Aruino 以紀念這個地方。2022/8/22Arduino零基礎 C語言編程341.2 認識 Arduino UNO圖中標出的數(shù)字口和模擬口,即為常說的 I/O。數(shù)字口有 013,模擬口有 05。2022/
13、8/22Arduino零基礎 C語言編程351.2 認識 Arduino UNOUNO 可以通過兩種方式供電方式:通過 USB 供電通過外接 612V 的 DC 電源。主控板上4 個 LED 燈和復位按鍵。ON 是電源指示燈,通電就會亮了。L是接在數(shù)字口 13 上的一個LED,在下面一節(jié)會有個樣例來說明的。TX、RX 是串口通訊指示燈,比如在下載程序的過程中,這兩個燈就會不停閃爍。2022/8/22Arduino零基礎 C語言編程361.2.1 下載 Arduino IDE打開網(wǎng)頁輸入網(wǎng)址 http:/arduino.cc/en/Main/Software,進入到頁面后,找到下圖顯示部分,下載
14、最新版本。Windows 用戶,點擊下載 Windows(ZIP file),如果 Mac,Linux 用戶則選擇相應的系統(tǒng)。下載完成后,解壓文件,把整個 Arduino 1.8.5 文件夾放到電腦熟悉的位置,便于之后查找。2022/8/22Arduino零基礎 C語言編程371.2.2 安裝驅(qū)動把 USB 一端插到 Arduino UNO 上,另一端連到電腦。連接成功后,UNO 板的紅色電源指示燈 ON 亮起。然后,打開控制面板,選擇設備管理器。 2022/8/22Arduino零基礎 C語言編程38找到其它設備Arduino-xx, 右擊選擇更新驅(qū)動程序軟件。2022/8/22Arduin
15、o零基礎 C語言編程39在彈出的對話框中選擇下面一項 - 手動查找并安裝驅(qū)動程序軟件。2022/8/22Arduino零基礎 C語言編程40打開到 Arduino IDE 安裝位置,就是上面那個解壓文件的位置,選擇搜索路徑到 drivers,點擊下一步。選擇始終安裝此驅(qū)動程序軟件,直至完成。2022/8/22Arduino零基礎 C語言編程41出現(xiàn)下圖,說明驅(qū)動安裝成功。2022/8/22Arduino零基礎 C語言編程42此時,設備管理器端口會顯示一個串口號。2022/8/22Arduino零基礎 C語言編程431.2.3 認識 Arduino IDE打開 Arudino IDE,就會出現(xiàn)
16、Arduino IDE 的編輯界面。2022/8/22Arduino零基礎 C語言編程44如果英文界面不太習慣的話,可以先更改為中文界面。選擇菜單欄 File Preferences,會跳出下面這個對話框,選擇 Editor language 簡體中文,點擊 OK。2022/8/22Arduino零基礎 C語言編程45Arduino IDE 基本也只需要用到右圖標示出來的部分就可以了,右圖大部分的白色區(qū)域就是代碼的編輯區(qū),用來輸入代碼的。注意,輸入代碼時,要切換到英文輸入法的模式。下面黑色的區(qū)域是消息提示區(qū),會顯示編譯或者下載是否通過。2022/8/22Arduino零基礎 C語言編程461.
17、2.4 下載一個 Blink 程序下載一個最簡單的代碼,既可以熟悉下載程序的整個過程,同時也測試下板子好壞。 UNO 板上標有 L 的 LED。這段測試代碼就是讓下圖中的LED燈閃爍。2022/8/22Arduino零基礎 C語言編程47插上 USB 線,打開 Arduino IDE 后,找到“Blink”代碼。2022/8/22Arduino零基礎 C語言編程48通常,寫完一段代碼后都需要校驗一下,看看代碼有沒有錯誤。點擊“校驗”。下圖顯示了正在校驗中。校驗完畢!2022/8/22Arduino零基礎 C語言編程49在下載程序之前,還要先告訴 Arduino IDE 板子型號以及相應的串口。
18、選擇所用的板卡 Board -Arduino UNO。2022/8/22Arduino零基礎 C語言編程50選擇當前的串口COM 口。 最后,點擊“下載”。下載完畢!以上就是給 Arduino 下載程序一個 blink 程序的整個過程。以后程序下載就照著這個步驟做就可以了,再理一下思路,分為三步走: 校驗-選擇 boards 和 com-下載!2022/8/22Arduino零基礎 C語言編程51第二章 Arduino語法基礎2022/8/2252Arduino零基礎 C語言編程2.1 程序結構在Arduino中, 標準的程序入口main函數(shù)在內(nèi)部被定義, 用戶只需要關心以下兩個函數(shù):(1)s
19、etup()當Arduino板起動時setup()函數(shù)會被調(diào)用。用它來初始化變量,引腳模式,開始使用某個庫,等等。該函數(shù)在Arduino板的每次上電和復位時只運行一次。(2)loop()在創(chuàng)建setup函數(shù),該函數(shù)初始化和設置初始值,loop()函數(shù)所做事的正如其名,連續(xù)循環(huán),允許程序改變狀態(tài)和響應事件??梢杂盟鼇韺崟r控制arduino板。Arduino零基礎 C語言編程532022/8/22示例:int buttonPin = 3;void setup() Serial.begin(9600); /初始化串口 pinMode(buttonPin, INPUT); /設置3號引腳為輸入模式vo
20、id loop() if (digitalRead(buttonPin) = HIGH) serialWrite(H); else serialWrite(L); delay(1000);Arduino零基礎 C語言編程542022/8/222.2 控制語句(1)選擇結構 a. if結構 :用于與比較運算符結合使用,測試是否已達到某些條件if (x 120) digitalWrite(LEDpin, HIGH); /格式1if (x 120)digitalWrite(LEDpin, HIGH); /格式2if (x 120) digitalWrite(LEDpin, HIGH); /格式3if
21、 (x 120) /格式4 digitalWrite(LEDpin1, HIGH); digitalWrite(LEDpin2, HIGH); / 以上格式都是正確的Arduino零基礎 C語言編程552022/8/22b. if.else結構 與基本的if語句相比,由于允許多個測試組合在一起,if/else可以使用更多的控制流。if (pinFiveInput 500) / 動作Aelse / 動作BArduino零基礎 C語言編程562022/8/22注意:一個else if語句塊可能有或者沒有終止else語句塊,同理。每個else if分支允許有無限多個。if (pinFiveInput
22、 = 1000) / 執(zhí)行動作Belse / 執(zhí)行動作C另外一種表達互斥分支測試的方式,是使用switch case語句。2022/8/22Arduino零基礎 C語言編程57c. switch case結構語法:switch (var) / var: 與不同的case中的值進行比較的變量 case label: / label: 相應的case的值 / statements break; case label: / statements break; default: / statementsbreak關鍵字將中止并跳出switch語句段,常常用于每個case語句的最后面。如果沒有break
23、語句,switch語句將繼續(xù)執(zhí)行下面的表達式(“持續(xù)下降”)直到遇到break,或者是到達switch語句的末尾。2022/8/22Arduino零基礎 C語言編程58(2)循環(huán)結構a. for結構for語句用于重復執(zhí)行被花括號包圍的語句塊。一個增量計數(shù)器通常被用來遞增和終止循環(huán)。for語句對于任何需要重復的操作是非常有用的。常常用于與數(shù)組聯(lián)合使用以收集數(shù)據(jù)/引腳。for循環(huán)的頭部有三個部分:for (初始化部分; 條件判斷部分; 數(shù)據(jù)遞增部分) /語句塊初始化部分被第一個執(zhí)行,且只執(zhí)行一次。每次通過這個循環(huán),條件判斷部分將被測試;如果為真,語句塊和數(shù)據(jù)遞增部分就會被執(zhí)行,然后條件判斷部分就會
24、被再次測試,當條件測試為假時,結束循環(huán)。2022/8/22Arduino零基礎 C語言編程59示例:/使用一個PWM引腳使LED燈閃爍int PWMpin = 10; / LED在10號引腳串聯(lián)一個470歐姆的電阻void setup() /這里無需設置void loop() for (int i=0; i = 255; i+) analogWrite(PWMpin, i); delay(10); 2022/8/22Arduino零基礎 C語言編程60編碼提示:C中的for循環(huán)比在其它計算機語言中發(fā)現(xiàn)的for循環(huán)要靈活的多。三個頭元素中的任何一個或全部可能被省略,盡管分號是必須的。而且初始化部
25、分、條件判斷部分和數(shù)據(jù)遞增部分可以是任何合法的使用任意變量的C語句。且可以使用任何數(shù)據(jù)類型包括floats。這些不常用的類型用于語句段也許可以為一些罕見的編程問題提供解決方案。例如,在遞增部分中使用一個乘法將形成對數(shù)級增長:for(int x = 2; x -1; i = i + x) analogWrite(PWMpin, i); if (i = 255) x = -1; / 在峰值切換方向 delay(10); 2022/8/22Arduino零基礎 C語言編程61b. While結構語法: while(expression) / expression - 一個(布爾型)C語句,被求值為真
26、或假 / statement(s)while循環(huán)將會連續(xù)地無限地循環(huán),直到圓括號()中的表達式變?yōu)榧佟1粶y試的變量必須被改變,否則while循環(huán)將永遠不會中止。這可以是代碼,比如一個遞增的變量,或者是一個外部條件,比如測試一個傳感器。示例:var = 0; while(var 200) / 做兩百次重復的事情 var+; 2022/8/22Arduino零基礎 C語言編程62c. do.while結構語法:do / 語句塊 while (測試條件); do循環(huán)與while循環(huán)使用相同方式工作,不同的是條件是在循環(huán)的末尾被測試的,所以do循環(huán)總是至少會運行一次。示例:do delay(50);
27、/ 等待傳感器穩(wěn)定 x = readSensors(); / 檢查傳感器的值 while (x 100);2022/8/22Arduino零基礎 C語言編程63(3)跳轉(zhuǎn)語句a. break語句break用于中止do,for,或while循環(huán),繞過正常的循環(huán)條件。它也用于中止switch語句。示例: for (x = 0; x threshold) / bail out on sensor detect x = 0; break; delay(50);2022/8/22Arduino零基礎 C語言編程64b. continue語句continue語句跳過一個循環(huán)的當前迭代的余下部分。(do,f
28、or,或while)。通過檢查循環(huán)測試條件它將繼續(xù)進行隨后的迭代。示例:for (x = 0; x 40 & x 400) return 1; else return 0; return 關鍵字對測試一段代碼很方便,不需“注釋掉”大段的可能是錯誤的代碼。void loop()/在此測試代碼是個好想法return;/ 這里是功能不正常的代碼/ 這里的代碼永遠也不會執(zhí)行2022/8/22Arduino零基礎 C語言編程66d. goto語句語法:label: goto label; /在程序中轉(zhuǎn)移程序流到一個標記點提示:在C程序中不建議使用goto,而且一些C編程書的作者主張永遠不要使用goto語
29、句,但是明智地使用它可以簡化某些代碼。許多程序員不贊成使用goto的原因是,無節(jié)制地使用goto語句很容易產(chǎn)生執(zhí)行流混亂的很難被調(diào)試程序。 盡管如是說,仍然有很多使用goto語句而大大簡化編碼的實例。其中之一就是從一個很深的循環(huán)嵌套中跳出去,或者是if邏輯塊,在某些條件下。示例: for(byte r = 0; r -1; g-) for(byte b = 0; b 250) goto bailout; / 其它語句。 bailout:2022/8/22Arduino零基礎 C語言編程672.3 相關語法(1) 分號示例:int a = 13; / 用于一個語句的結束提示:忘記在一行的末尾加一
30、個分號將產(chǎn)生一個編譯器錯誤。該錯誤信息可能是明顯的,且會提及丟失分號,但也許不會。如果出現(xiàn)一個不可理喻的或看起來不合邏輯的錯誤,其中一個首先要做的事就是檢查分號丟失。編譯器會在前一行的附近發(fā)出抱怨。Arduino零基礎 C語言編程682022/8/22(2)大括號大括號(又稱括弧或花括號)是C語言的主要組成部分。一個左大括號必須有一個右大括號跟在后面。這是一個常被稱為平衡括號的條件。Arduino IDE(集成開發(fā)環(huán)境)包含一個方便的特性以檢驗平衡大括號。只需選擇一個大括號,甚至直接在一個大括號后面點擊插入點,然后它的邏輯上的同伴就會高亮顯示。2022/8/22Arduino零基礎 C語言編程
31、69(3)注釋注釋是程序中的一些行,用于讓自己或他人了解程序的工作方式。它們會被編譯器忽略,而不會輸出到控制器,所以它們不會占用Atmega芯片上的任何空間。注釋唯一的目的是幫助理解(或記憶)程序是怎樣工作的,或者是告知其他人程序是怎樣工作的。標記一行為注釋只有兩種方式:(1) x = 5; /這是一個單行注釋。此斜線后的任何內(nèi)容都是注釋 /直到該行的結尾(2)/* 這是多行注釋 - 用它來注釋掉整個代碼塊if (gwb = 0) /在多行注釋中使用單行注釋是沒有問題的x = 3; /* 但是其中不可以使用另一個多行注釋 - 這是不合法的 */別忘了加上“關閉”注釋符 - 它們必須是平衡的*/
32、2022/8/22Arduino零基礎 C語言編程70(4) define宏定義宏定義是一個有用的C組件,它允許程序員在程序編譯前給常量取一個名字。在arduino中定義的常量不會在芯片中占用任何程序空間。編譯器在編譯時會將這些常量引用替換為定義的值。Arduino宏定義與C宏定義有同樣的語法語法:#define constantName value 注意:#是必須的示例:#define ledPin 3/ 編譯器在編譯時會將任何提及l(fā)edPin的地方替換成數(shù)值3。提示:#define語句的后面分號。如果加了一個,編譯器將會在進一步的頁面引發(fā)奇怪的錯誤。#define ledPin 3; /
33、錯誤類似地,包含一個等號通常也會在進一步的頁面引發(fā)奇怪的編譯錯誤。#define ledPin = 3 / 錯誤2022/8/22Arduino零基礎 C語言編程71(5) include#include用于在sketch中包含外部的庫。這使程序員可以訪問一個巨大的標準C庫(預定義函數(shù)集合)的集合。注意#include和#define相似,沒有分號終止符,且如果加了,編譯器會產(chǎn)生奇怪的錯誤信息。示例:該示例包含一個用于輸出數(shù)據(jù)到程序空間閃存的庫,而不是內(nèi)存。這會為動態(tài)內(nèi)存需求節(jié)省存儲空間且使需要創(chuàng)建巨大的查找表變得更實際。#include prog_uint16_t myConstants P
34、ROGMEM = 0, 21140, 702 , 9128, 0, 25764, 8456,0,0,0,0,0,0,0,0,29810,8968,29762,29762,4500;2022/8/22Arduino零基礎 C語言編程722.4 運算符(1) 算術運算符a. 賦值 =賦值運算符(單個等號)在C語言中單個等號被稱為賦值運算符。它與在代數(shù)課中的意義不同,后者象征等式或相等。賦值運算符告訴微控制器求值等號右邊的變量或表達式,然后把結果存入等號左邊的變量中。 int sensVal; /聲明一個名為sensVal的整型變量 senVal = analogRead(0); /存儲(數(shù)字的)0
35、號模擬引腳的輸入電壓值到sensVal賦值運算符(=號)左邊的變量需要能夠保存存儲在其中的值。如果它不足以大到容納一個值,那個存儲在該變量中的值將是錯誤的。不要混淆賦值運算符 = (單個等號)和比較運算符 = (雙等號),后者求值兩個表達式是否相等。Arduino零基礎 C語言編程732022/8/22b. 加,減,乘,除這些運算符(分別)返回運算對象的和,差,積,商。這些操作受運算對象的數(shù)據(jù)類型的影響。所以,例如,9 / 4結果是2,如果9和2是整型數(shù)。這也意味著運算會溢出,如果結果超出其在相應的數(shù)據(jù)類型下所能表示的數(shù)。(例如,給整型數(shù)值32767加1結果是-32768)。如果運算對象是不同
36、的類型,會用那個較大的類型進行計算。如果其中一個數(shù)字(運算符)是float類型或double類型,將采用浮點數(shù)進行計算。語法:result = value1 + value2;result = value1 - value2;result = value1 * value2;result = value1 / value2;Arduino零基礎 C語言編程742022/8/22示例:y = y + 3;x = x - 7;i = j * 6;r = r / 5;c. 取模%計算一個數(shù)除以另一個數(shù)的余數(shù)。這對于保持一個變量在一個特定的范圍很有用(例如:數(shù)組的大?。UZ法:result = div
37、idend% divisor 示例代碼:int values10;int i = 0;void setup() void loop() valuesi = analogRead(0); i = (i + 1)% 10; / modulo operator rolls over variable 提示:取模運算符不能用于浮點型數(shù)。Arduino零基礎 C語言編程752022/8/22示例:x = 7% 5; / x now contains 2x = 9% 5; / x now contains 4x = 5% 5; / x now contains 0 x = 4% 5; / x now co
38、ntains 4(2) 比較運算符 =,!=, ,=, 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); / all are correctArduino零基礎 C語言編程762022/8/222022/8/22Arduino零基礎 C語言編程77(3) 比較運算符 =,!=, a. & (
39、邏輯與)只有在兩個操作數(shù)都為真時才返回真,例如:if (digitalRead(2) = HIGH & digitalRead(3) = HIGH) / read two switches / . 只在兩個輸入都為高時返回真。b. | (邏輯或)任意一個為真時返回真,例如:if (x 0 | y 0) / . x或y任意一個大于0時返回真c. ! (非)當操作數(shù)為假時返回真,例如:if (!x) / . 若x為假返回真(即如果x等于0)2022/8/22Arduino零基礎 C語言編程78(4)位運算按位與(&)規(guī)則: 0 0 1 1 operand1 0 1 0 1 operand2 - 0
40、 0 0 1 (operand1 & operand2) - returned result示例: int a = 92; / in binary: 0000000001011100 int b = 101; / in binary: 0000000001100101 int c = a & b; / result: 0000000001000100, or 68 in decimal.2022/8/22Arduino零基礎 C語言編程79(4)位運算b. 按位或(|)規(guī)則: 0 0 1 1 operand1 0 1 0 1 operand2 - 0 1 1 1 (operand1 | ope
41、rand2) - returned result示例: int a = 92; / in binary: 0000000001011100 int b = 101; / in binary: 0000000001100101 int c = a | b; / result: 0000000001111101, or 125 in decimal.2022/8/22Arduino零基礎 C語言編程80(4)位運算c. 按位異或()規(guī)則: 0 0 1 1 operand1 0 1 0 1 operand2 - 0 1 1 0 (operand1 operand2) - returned resul
42、t “”運算符常用于翻轉(zhuǎn)整數(shù)表達式的某些位(例如從0變?yōu)?,或從1變?yōu)?)。在一個按位異或操作中,如果相應的掩碼位為1, 該位將翻轉(zhuǎn),如果為0,該位不變。以下是一個閃爍引腳5的程序。/ Blink_Pin_5/ demo for Exclusive ORvoid setup()DDRD = DDRD | B00100000; / set digital pin five as OUTPUT Serial.begin(9600);void loop()PORTD = PORTD B00100000; / invert bit 5 (digital pin 5), leave others unt
43、oucheddelay(100);2022/8/22Arduino零基礎 C語言編程81(4)位運算d. 按位取反()規(guī)則: 按位取反操作會翻轉(zhuǎn)其每一位。0變?yōu)?,1變?yōu)?。例如: 0 1 operand1 - 1 0 operand1 int a = 103; / binary: 0000000001100111 int b = a; / binary: 1111111110011000 = -104e. 左移運算()int a = 5; / binary: 0000000000000101int b = a 3; / binary: 0000000000000101, or back to
44、 5 like we started with當把x左移y位(x y),x中最左邊的y位將會丟失。int a = 5; / binary: 0000000000000101int b = a 8); / shift out lowbyteshiftOut(dataPin, clock, MSBFIRST, data);/ Or do this for LSBFIRST serialdata = 500;/ shift out lowbyteshiftOut(dataPin, clock, LSBFIRST, data); / shift out highbyteshiftOut(dataPin
45、, clock, LSBFIRST, (data 8); Arduino零基礎 C語言編程972022/8/222.6 基本函數(shù)3. 高級I/O(2)pulseIn():讀脈沖格式:unsigned long pulseIn (uint8_t pin, uint8_t state, unsigned long timeout) 作用:讀引腳的脈沖, 脈沖可以是 HIGH 或 LOW。如果是 HIGH,函數(shù)將先等引腳變?yōu)楦唠娖剑缓?開始計時,一直到變?yōu)榈碗娖綖橹埂7祷孛}沖持續(xù)的時間長短,單位為微秒。如果超時還沒有讀到的話,將返回0。參數(shù):pin 引腳編號state 脈沖狀態(tài)timeout 超時
46、時間(us)示例:下面的例子演示了統(tǒng)計高電平的繼續(xù)時間:int pin = 7;unsigned long duration;void setup() pinMode(pin, INPUT);void loop() duration = pulseIn(pin, HIGH);Arduino零基礎 C語言編程982022/8/222.6 基本函數(shù)4 .時間(1)millis():毫秒時間格式:unsigned long millis (void)作用:獲取機器運行的時間長度,單位毫秒。系統(tǒng)最長的記錄時間接近50天, 如果超出時間將從0開始。注意,時間為 unsigned long類型, 如果用
47、int 保存時間將得到錯誤結果。(2)delay(ms):延時(毫秒)格式:void delay (unsigned long ms) 作用:延時, 單位毫秒(1秒有1000毫秒)。(3)delayMicroseconds(us):延時(微秒)格式:void delayMicroseconds (unsigned int us) 作用:延時, 單位為微妙(1毫秒有1000微妙)。 如果延時的時間有幾千微妙, 那么建議使用 delay 函數(shù)。 目前參數(shù)最大支持16383微秒(不過以后的版本中可能會變化)。Arduino零基礎 C語言編程992022/8/222.6 基本函數(shù)5.數(shù)學庫(1)min
48、():最小值(2)max():最大值(3)abs():求絕對值(4)constrain():調(diào)整到區(qū)間(5)map():等比映射(6)pow():指數(shù)函數(shù)(7)sqrt():開平方6 . 三角函數(shù)sin(),cos(),tan()float sin (float rad)/正弦函數(shù) float cos (float rad)/余弦函數(shù) float tan (float rad)/正切函數(shù) Arduino零基礎 C語言編程1002022/8/222.6 基本函數(shù)7. 隨機數(shù):設置隨機種子(1)randomSeed()格式:void randomSeed ( unsigned int seed )
49、 作用:可以用當前時間作為隨機種子, 隨機種子的設置對產(chǎn)生的隨機序列有影響。參數(shù):seed 隨機種子(2)random():生成隨機數(shù)格式1:long random (long howbig) 作用:生成0, howbig-1范圍的隨機數(shù)。參數(shù):howbig 最大值格式2::long random (long howsmall, long howbig) 作用:生成howsmall, howbig-1范圍的隨機數(shù).參數(shù):howsmall 最小值howbig 最大值Arduino零基礎 C語言編程1012022/8/222.6 基本函數(shù)8. 隨機數(shù):設置隨機種子#define lowByte(w
50、) (w) & 0 xff) /取低字節(jié) #define highByte(w) (w) 8) /取高字節(jié) #define bitRead(value, bit) (value) (bit) & 0 x01) /讀一個bit #define bitWrite(value, bit, bitvalue) (bitvalue? bitSet(value, bit): bitClear(value, bit) /寫一個bit #define bitSet(value, bit) (value) |= (1UL (bit) /設置一個bit #define bitClear(value, bit) (
51、value) &= (1UL (bit) /清空一個bit #define bit(b) (1 120) digitalWrite(LEDpin, HIGH); /格式1if (x 120)digitalWrite(LEDpin, HIGH); /格式2if (x 120) digitalWrite(LEDpin, HIGH); /格式3if (x 120) /格式4 digitalWrite(LEDpin1, HIGH); digitalWrite(LEDpin2, HIGH); / 以上格式都是正確的Arduino零基礎 C語言編程1072022/8/22b. if.else結構 與基本的
52、if語句相比,由于允許多個測試組合在一起,if/else可以使用更多的控制流。if (pinFiveInput 500) / 動作Aelse / 動作BArduino零基礎 C語言編程1082022/8/22注意:一個else if語句塊可能有或者沒有終止else語句塊,同理。每個else if分支允許有無限多個。if (pinFiveInput = 1000) / 執(zhí)行動作Belse / 執(zhí)行動作C另外一種表達互斥分支測試的方式,是使用switch case語句。2022/8/22Arduino零基礎 C語言編程109c. switch case結構語法:switch (var) / var
53、: 與不同的case中的值進行比較的變量 case label: / label: 相應的case的值 / statements break; case label: / statements break; default: / statementsbreak關鍵字將中止并跳出switch語句段,常常用于每個case語句的最后面。如果沒有break語句,switch語句將繼續(xù)執(zhí)行下面的表達式(“持續(xù)下降”)直到遇到break,或者是到達switch語句的末尾。2022/8/22Arduino零基礎 C語言編程110(2)循環(huán)結構a. for結構for語句用于重復執(zhí)行被花括號包圍的語句塊。一個增
54、量計數(shù)器通常被用來遞增和終止循環(huán)。for語句對于任何需要重復的操作是非常有用的。常常用于與數(shù)組聯(lián)合使用以收集數(shù)據(jù)/引腳。for循環(huán)的頭部有三個部分:for (初始化部分; 條件判斷部分; 數(shù)據(jù)遞增部分) /語句塊初始化部分被第一個執(zhí)行,且只執(zhí)行一次。每次通過這個循環(huán),條件判斷部分將被測試;如果為真,語句塊和數(shù)據(jù)遞增部分就會被執(zhí)行,然后條件判斷部分就會被再次測試,當條件測試為假時,結束循環(huán)。2022/8/22Arduino零基礎 C語言編程111示例:/使用一個PWM引腳使LED燈閃爍int PWMpin = 10; / LED在10號引腳串聯(lián)一個470歐姆的電阻void setup() /這里
55、無需設置void loop() for (int i=0; i = 255; i+) analogWrite(PWMpin, i); delay(10); 2022/8/22Arduino零基礎 C語言編程112編碼提示:C中的for循環(huán)比在其它計算機語言中發(fā)現(xiàn)的for循環(huán)要靈活的多。三個頭元素中的任何一個或全部可能被省略,盡管分號是必須的。而且初始化部分、條件判斷部分和數(shù)據(jù)遞增部分可以是任何合法的使用任意變量的C語句。且可以使用任何數(shù)據(jù)類型包括floats。這些不常用的類型用于語句段也許可以為一些罕見的編程問題提供解決方案。例如,在遞增部分中使用一個乘法將形成對數(shù)級增長:for(int x
56、= 2; x -1; i = i + x) analogWrite(PWMpin, i); if (i = 255) x = -1; / 在峰值切換方向 delay(10); 2022/8/22Arduino零基礎 C語言編程113b. While結構語法: while(expression) / expression - 一個(布爾型)C語句,被求值為真或假 / statement(s)while循環(huán)將會連續(xù)地無限地循環(huán),直到圓括號()中的表達式變?yōu)榧?。被測試的變量必須被改變,否則while循環(huán)將永遠不會中止。這可以是代碼,比如一個遞增的變量,或者是一個外部條件,比如測試一個傳感器。示例:v
57、ar = 0; while(var 200) / 做兩百次重復的事情 var+; 2022/8/22Arduino零基礎 C語言編程114c. do.while結構語法:do / 語句塊 while (測試條件); do循環(huán)與while循環(huán)使用相同方式工作,不同的是條件是在循環(huán)的末尾被測試的,所以do循環(huán)總是至少會運行一次。示例:do delay(50); / 等待傳感器穩(wěn)定 x = readSensors(); / 檢查傳感器的值 while (x 100);2022/8/22Arduino零基礎 C語言編程115(3)跳轉(zhuǎn)語句a. break語句break用于中止do,for,或while
58、循環(huán),繞過正常的循環(huán)條件。它也用于中止switch語句。示例: for (x = 0; x threshold) / bail out on sensor detect x = 0; break; delay(50);2022/8/22Arduino零基礎 C語言編程116b. continue語句continue語句跳過一個循環(huán)的當前迭代的余下部分。(do,for,或while)。通過檢查循環(huán)測試條件它將繼續(xù)進行隨后的迭代。示例:for (x = 0; x 40 & x 400) return 1; else return 0; return 關鍵字對測試一段代碼很方便,不需“注釋掉”大段的
59、可能是錯誤的代碼。void loop()/在此測試代碼是個好想法return;/ 這里是功能不正常的代碼/ 這里的代碼永遠也不會執(zhí)行2022/8/22Arduino零基礎 C語言編程118d. goto語句語法:label: goto label; /在程序中轉(zhuǎn)移程序流到一個標記點提示:在C程序中不建議使用goto,而且一些C編程書的作者主張永遠不要使用goto語句,但是明智地使用它可以簡化某些代碼。許多程序員不贊成使用goto的原因是,無節(jié)制地使用goto語句很容易產(chǎn)生執(zhí)行流混亂的很難被調(diào)試程序。 盡管如是說,仍然有很多使用goto語句而大大簡化編碼的實例。其中之一就是從一個很深的循環(huán)嵌套中
60、跳出去,或者是if邏輯塊,在某些條件下。示例: for(byte r = 0; r -1; g-) for(byte b = 0; b 250) goto bailout; / 其它語句。 bailout:2022/8/22Arduino零基礎 C語言編程1192.3 相關語法(1) 分號示例:int a = 13; / 用于一個語句的結束提示:忘記在一行的末尾加一個分號將產(chǎn)生一個編譯器錯誤。該錯誤信息可能是明顯的,且會提及丟失分號,但也許不會。如果出現(xiàn)一個不可理喻的或看起來不合邏輯的錯誤,其中一個首先要做的事就是檢查分號丟失。編譯器會在前一行的附近發(fā)出抱怨。Arduino零基礎 C語言編程1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 變態(tài)測試題目及答案
- 廣告設計師證書考試設計過程分析題及答案
- 產(chǎn)品原理測試題及答案
- 應急管理條例試題及答案
- 醫(yī)院出納財務筆試題及答案
- 整合營銷傳播的關鍵要素試題及答案
- php編程面試題及答案
- 品牌形象塑造的考察試題及答案
- 數(shù)學高數(shù)期末試題及答案
- 2024年廣告設計師考試綜合提升試題及答案
- 國家金融監(jiān)督管理總局所屬事業(yè)單位招聘真題2024
- 2024年全國高中數(shù)學聯(lián)賽(浙江預賽)試題含參考答案
- 2025年甘肅省公路發(fā)展集團限公司招聘70人歷年高頻重點模擬試卷提升(共500題附帶答案詳解)
- 人教PEP版(2024)三年級下冊英語Unit5 Old toys單元整體教學設計(共6課時)
- 知識產(chǎn)權投資從理論到實踐的轉(zhuǎn)化
- 《2025年公路工程集料試驗規(guī)程》知識培訓
- 客戶生命周期價值預測-第1篇-深度研究
- 文化轉(zhuǎn)型時代的文化基因與共生教育選擇
- 2025年四川航空股份有限公司招聘筆試參考題庫含答案解析
- 河北省保定市重點中學2025屆高考英語一模試卷含解析
- 《便攜式揮發(fā)性有機物檢測儀 (PID)技術要求及監(jiān)測規(guī)范》
評論
0/150
提交評論