Try   HackMD
tags: Arduino

Arduino 程式架構及語法

Arduino有自己的一套IDE(整合開發環境),包含了編輯器以及編譯器,且它能編譯數十種不同型號的版子(不同的微控),有需要都可以上Google找。這篇主要是講Arduino IDE中的程式部分,要看介面使用請見這篇
Arduino IDE 2.0

基本架構

//範例程式------ #include<...> //1. 引入函式庫 //-------------------------------------------------------------------------- const int pin = 13; //2. 腳位或變數定義 int blink = 1000; //-------------------------------------------------------------------------- void setup(){ //3. 重複執行前的定義或是只需要做一次的動作 pinMode(pin,OUTPUT); } //-------------------------------------------------------------------------- void loop(){ //4. 主程式 while(blink>0){ digitalWrite(pin,HIGH); delay(blink); digitalWrite(pin,LOW); delay(blink); blink -= 100; } blink = 1000; } //-------------------------------------------------------------------------- void OuO(){ //5. 自訂函式 }

1. 引入函式庫

因為Arduino是個不完全的Cpp,且語法不完全相同,加上它又需要去控制及讀取Arduino的訊號,所以時不時會需要不同的函式去做操作,最常見的有< SoftwareSerial.h > < SPI.h > < Wire.h >等,除了引用寫好的函式,也可以從網上下載,詳情請見Arduino Libraries

2. 腳位或變數定義

Arduino的腳位是用數字來定義,像是0到13的digital pin,其實只需要直接寫入就行,但有時為了辨識方便,所以用一個廣域變數來幫它命名,所以在主程式中打它的名字就會是你定義的腳位,有時會怕不小心動到腳位的定義,所以會在前面加上一個const。除了腳位定義,這裡也能放你需要計算的變數,在程式中的任何一個地方都能取用(全域變數)。

3. 重複執行前的定義或是只需要做一次的動作

我們通常會將腳位的狀態定義放在這裡,或是像一些通訊的速率、頻段的設置,只需要做一次的事情放這就行了,不用讓它在下面的loop中一直跑。

4. 主程式

顧名思義就是放要執行的程式的地方,和Cpp不同的是它本身就是一個無限迴圈,所以它會一直執行一套相同的動作,或是你用變數控制裡面的動作次數。

5. 自訂函數

如果覺得寫一些要執行的動作會很複雜,又或是你要寫遞迴的式子,都可以用自訂函數來簡化loop中的結構,也能讓程式比較容易閱讀。

基本函式

下面幾個常用的函式是內建在Arduino中的,雖簡單但是很重要,如果無法理解就很難融會貫通,而其它複雜的大多要進行include才能使用,但只需下面幾個就能做到很簡單的Arduino project,如需了解digital,analog的差別,請見基本電學及基礎電料

  • pinMode(腳位,狀態)
    在setup中是不可或缺的一個函式,如果沒有定義腳位是輸出或輸入,它完全不會做動(沒有預設狀態),可設的狀態有兩種,分別是INPUTOUTPUT,而在數位腳上,Arduino有內建上拉電阻,只要用INPUT_PULLUP就能啟動

  • digital
    它適用於所有腳位包括類比腳位

    1.digitalRead(腳位)
    它讀到的數值只有1和0(高電位和低電位),多用來判斷有無觸發開關或感測器

    2.digitalWrite(腳位,電位)
    它和read相對,電位可以寫HIGH或是LOW(高電平及低電平)

  • analog
    1.analogRead(腳位)
    只適用類比腳位,讀入的數值會是0到1023的值(2⁰~2¹⁰)

    2.analogWrite(腳位,電位)
    只適用於有寫~(pwm)符號的數位腳位,這是pwm的寫法,可以輸出0-255的值,或是用map轉成0-1023,輸出電壓由低電位到高電位,pwm的介紹請見基本電學及基礎電料

  • Serial

    1.Serial.begin(鮑率)
    鮑率是板子和電腦之間的通訊頻率,通常會使用9600或是115200,鮑率介紹見Aduino IDE使用與操作

    2.Serial.print(數值/字串/字元)
    可以在序列埠監控視窗看到輸出,一次只能輸出一行,和cpp是一樣的

    3.Serial.println(數值/字串/字元)
    和print不同的是它會先換行再輸出

    4.Srial.available()
    通常會用if來判斷,它會讀取序列通訊介面是否有任何資料輸入,如果有則為true,反之為false。

    補充.
    習慣cpp的人在做輸入輸出時會很想打>>和<<,這可以在<Streaming.h>中找到,如要使用要上網下載函式庫

  • delay(毫秒數)
    功用是延遲程式的執行,或是製造緩衝時間,也可以用delayMicroseconds()