Try   HackMD
tags: Arduino

Arduino(C++)基礎語法

以下是Arduino中會用到的基本語法(用的是arduino的寫法),要看完整的Cpp教學請上Google自行查詢。Arduino的程式是建立在Cpp之上,但並不完全包含所有函數,如有Cpp中能用但Arduino中無法include的東西(如<<和vector),請見下面的擴充函式庫連結,使用方法會在libraries(函式庫)的使用中說明

Arduino Libraries List
Arduino Libraries使用

C++大神請跳

Arduino程式基本架構及語法

資料型態

在Arduino中我們會常用到的型態有以下幾個

  • int(整數)
    在Arduino中近7成的感測器是以整數型態來進行感測或運算,就算運算會用到小數,還是會以整數讀入後再轉型態,另有一種是unsigned int,總範圍和int一樣,但是是以正整數運算,否則會吃error

  • float(小數/浮點數)
    有部分的感應器比較精準,需要用到小數來運算

  • bool/boolean(布林值)
    bool也可以使用int進行表示,它多用於像是按鈕或是感應"是否被觸發"的sensor

  • char(字元)
    char可以用於輸出或是指令、比較

  • string(字串)
    string可以視為一個裝了char的陣列

  • 資料轉型(補充)
    可以直接用 目標型態(轉換前的值) 進行轉換

運算子

運算子是C++中進行簡單運算、比較運算或是位元運算所不可或缺的一環,像是有基礎的

迴圈

用來處理需要重複執行的動作或是執行指定的次數或條件

  • for(運算用變數;結束條件(不符合);值的變化量)
    for是可以控制執行次數的迴圈,它會從設定的值開始跑,並在每次跑完執行變化,直到設定值不符合結束條件時離開迴圈
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
  • while(執行條件)
    while後的條件只要成立就會一直執行,執行到不符合條件時會跳出
void setup(){ int i=0; while(i<10){ Serial.print(i); Serial.print(' '); i++; } } 結果: 0 1 2 3 4 5 6 7 8 9
  • do while(執行條件)
    和while差不多,不同的是它會先執行才進行判斷,所以範例中會多一個10
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
  • break
    它會找到最近一層的迴圈然後跳離
void setup(){ int i=0; while(i<10){ Serial.print(i); Serial.print(' '); if(i==5) break; i++; } } 結果: 1 2 3 4 5

判斷

  • if(條件)
    判斷條件是否成立,成立即執行,同時自身的值變成true(if自己可以代表一個bool),如不成立則設為false,或是進入else或是下個if
void setup(){ int i=4; if(i==5) Serial.println("yes"); else Serial.println(i); } 結果: 4
  • switch(條件)
    在括號中放入要比較的值,和if的功能類似,而switch比較像是分類,依照輸入的值去case找符合的值,defult是當所有條件都不符時的動作,但如果不寫break,它會把所有的case都跑一遍(包括defult)
void setup(){ char a = 'a'; switch(a){ case 'a': Serial.println('a'); break; case 'b': Serial.println(b); break; defult: Serial.println("QQ"); } } 結果: a
  • exit(1)
    執行時會強制停下所有執行中的動作
void setup(){ for(int i=0;i<10;i++){ Serial.print('a'); if(i==4) exit(1); } } 結果: aaaaa

自訂函數

基本架構中也會再講一次
結構是型態 函數名(引數){},型態取決於你的回傳值,假設要回傳整數,型態就要放int,如果只是簡單的動作執行,要用void,函數後的括號中可以放入想要傳進函數中運算的值,不放也沒關係

void setup(){ int num = 5; Serial.println(plus(num)); } int plus(int a){ a += 5; return a; } 結果: 10