###### 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
```