###### tags: `Arduino` # Arduino(C++)基礎語法 以下是Arduino中會用到的**基本**語法(用的是arduino的寫法),要看完整的Cpp教學請上Google自行查詢。Arduino的程式是建立在Cpp之上,但並不完全包含所有函數,如有Cpp中能用但Arduino中無法include的東西(如<<和vector),請見下面的擴充函式庫連結,使用方法會在libraries(函式庫)的使用中說明 [Arduino Libraries List](https://www.arduinolibraries.info/libraries) [Arduino Libraries使用](/LThJq7lpR-q9cm3RqXzq8g) ###### C++大神請跳 [Arduino程式基本架構及語法](https://hackmd.io/uh_UWZRaRNeGPiV-3_4Fxg) # 資料型態 在Arduino中我們會常用到的型態有以下幾個 * <font color="blue">int(整數)</font> 在Arduino中近7成的感測器是以整數型態來進行感測或運算,就算運算會用到小數,還是會以整數讀入後再轉型態,另有一種是unsigned int,總範圍和int一樣,但是是以正整數運算,否則會吃error * <font color="blue">float(小數/浮點數)</font> 有部分的感應器比較精準,需要用到小數來運算 * <font color="blue">bool/boolean(布林值)</font> bool也可以使用int進行表示,它多用於像是按鈕或是感應"是否被觸發"的sensor * <font color="blue">char(字元)</font> char可以用於輸出或是指令、比較 * <font color="blue">string(字串)</font> string可以視為一個裝了char的陣列 * <font color="red">資料轉型(補充)</font> 可以直接用 **目標型態(轉換前的值)** 進行轉換 # 運算子 運算子是C++中進行簡單運算、比較運算或是位元運算所不可或缺的一環,像是有基礎的 # 迴圈 用來處理需要重複執行的動作或是執行指定的次數或條件 * <font color="blue">for(運算用變數;結束條件(不符合);值的變化量)</font> for是可以控制執行次數的迴圈,它會從設定的值開始跑,並在每次跑完執行變化,直到設定值不符合結束條件時離開迴圈 ```cpp= void setup(){ for(int i=0;i<10;i++){ //從0開始一直執行到9,因為10不符合條件,所以總共執行10次 Serial.print(i); Serial.print(' '); } } 結果: 0 1 2 3 4 5 6 7 8 9 ``` * <font color="blue">while(執行條件)</font> while後的條件只要成立就會一直執行,執行到不符合條件時會跳出 ```cpp= void setup(){ int i=0; while(i<10){ Serial.print(i); Serial.print(' '); i++; } } 結果: 0 1 2 3 4 5 6 7 8 9 ``` * <font color="blue">do while(執行條件)</font> 和while差不多,不同的是它會先執行才進行判斷,所以範例中會多一個10 ```cpp= void setup(){ int i=0; do{ Serial.print(i); Serial.print(' '); i++; }while(i<10) } 結果: 1 2 3 4 5 6 7 8 9 10 ``` * <font color="blue">break</font> 它會找到最近一層的迴圈然後跳離 ```cpp= void setup(){ int i=0; while(i<10){ Serial.print(i); Serial.print(' '); if(i==5) break; i++; } } 結果: 1 2 3 4 5 ``` # 判斷 * <font color="blue">if(條件)</font> 判斷條件是否成立,成立即執行,同時自身的值變成true(if自己可以代表一個bool),如不成立則設為false,或是進入else或是下個if ```cpp= void setup(){ int i=4; if(i==5) Serial.println("yes"); else Serial.println(i); } 結果: 4 ``` * <font color="blue">switch(條件)</font> 在括號中放入要比較的值,和if的功能類似,而switch比較像是分類,依照輸入的值去case找符合的值,defult是當所有條件都不符時的動作,但如果不寫break,它會把所有的case都跑一遍(包括defult) ```cpp= void setup(){ char a = 'a'; switch(a){ case 'a': Serial.println('a'); break; case 'b': Serial.println(b); break; defult: Serial.println("QQ"); } } 結果: a ``` * <font color="blue">exit(1)</font> 執行時會強制停下所有執行中的動作 ```cpp= void setup(){ for(int i=0;i<10;i++){ Serial.print('a'); if(i==4) exit(1); } } 結果: aaaaa ``` # 自訂函數 ***基本架構中也會再講一次*** 結構是**型態 函數名(引數){......}**,型態取決於你的回傳值,假設要回傳整數,型態就要放int,如果只是簡單的動作執行,要用void,函數後的括號中可以放入想要傳進函數中運算的值,不放也沒關係 ```cpp= void setup(){ int num = 5; Serial.println(plus(num)); } int plus(int a){ a += 5; return a; } 結果: 10 ```