EP.02 【Arduino 程式基本架構】


setup() 和 loop() 函式

所有 Arduino 程式都是由 setuploop 兩大區塊所組成,這個「區塊」的正式名稱叫做函式 (function)

以下為最基本的 Arduino 程式:

void setup(){

}
void loop(){

}


‏※函式名稱後面一定跟著小括號 ex. setup()
‏※大括號用於界定程式區塊的起始範圍 ex. 上方綠色部分



setup()
此函式的作用式式設定程式參數,例如,指定哪一個接腳是輸出」或「輸入」,而且 setup() 裡的程式碼從頭到尾只會被執行一次

loop()
在此函式裡的程式敘述,將不停地重複執行,直到電源關閉為止。

‏※"void" 代表「沒有傳回值」



設定接腳的工作模式:輸入或輸出

若是要控制某個數位接腳的元件,必須先把該接腳設定成「輸出 (output)」模式;
若是要接收來自感應器的輸入值,則要把該接腳設定成「輸入 (input)」模式。

設定接腳狀態的程式碼要放在 setup() 函式裡面。

pinMode()
此函式用於設定接腳模式,格式如下:

pinMode(接腳編號, 模式);

接腳編號:可能值為1~19 (數位腳) 或者 A0~A5 (類比腳)
模式:可能值為 OUTPUT (輸出,全部大寫) 或 INPUT (輸入)

例如:
pinMode(13, OUTPUT);


※Arduino 的程式指令會區分大小寫,所以不能擅自改大小寫,像 "pinMode" 不能寫成 "pinmode";"INPUT" 也不能寫成 "input"。‏※除了大括號 '{' 及 '}' 以及少數例外,幾乎每一行指令敘述都要用分號 ';' 結尾。




輸出類比訊號

digitalWrite()
Arduino 的每個數位和類比接腳都能輸出「高電位 (HIGH 或 1),代表輸出 5V」和「低電位 (LOW 或 0)」訊號,輸出數位訊號的函是指令是 digitalWrite (digital 是數位,write 代表寫入)。格式如下:

digitalWrite(接腳編號, 輸出訊號);

接腳編號:可能值為1~19 (數位腳) 或者 A0~A5 (類比腳)
輸出訊號:可能值為 HIGH (高電位) 或 LOW (低電位),或寫成數字 1 0

例如:
digitalWrite(13, HIGH);


採用 ATmega328 處理器的 Arduino 板子上的 A0~A5 類比腳位,也相當於數位 14~19腳因此底下兩行敘述都代表在 A1 腳位輸出「高電位」:

digitalWrite(A1, HIGH);
digitalWrite(15, HIGH);




延遲與凍結時間

delay()
Arduino 具有一個延遲毫秒 (ms,千分一秒) 的函式指令,叫做 delay()

delay(延遲毫秒數);

延遲毫秒數:1/1000秒,10-3。如要延遲一秒,即填入1000。

例如:
delay(1000);



delayMicroseconds()
Arduino 還有另一個延遲微秒 (μs) 的指令,能精確延遲 3μs~16383μs,但超過 16383 以上的微秒值就不太準確了:

delayMicroseconds(延遲微秒數);

延遲微秒數:1/1000000秒,亦即10-6秒。此值不要超過16383。



程式基本規則

語法1:縮排
程式的語法類似英文,每個指令之間用空白隔開,像 void 和 setup 之間要插入空格 (要插入幾個空格都可以)。

void setup(){
   pinMode(13, OUTPUT);
}

習慣上會在大括弧內的敘述前面加上許多空白 (在每一行前面按一下 "Tab鍵" 即可插入許多空白) 產生縮排效果,這是為了方便閱讀。


語法2:註解
當程式碼越來越長,越來越複雜時,為幫助自己或其他人能迅速了解其程式片段的功能,我們可以在其中留下註解 (comment),也就是程式的說明文字

註解的語法是在說明文字的最前面加上雙斜線 "//",或者在數行註解文字的前後加上 /* 和 */,例如:

/*
LED閃閃
作者:Roger
LED燈接在第13腳
*/
void setup(){
   //第13腳設定成「輸出」
   pinMode(13, OUTPUT);
}

深綠色字即為註解。

程式編譯器不會理會註解內容。


小試身手:LED燈閃爍程式

請在 Arduino 程式開發工具,在程式編輯窗口輸入程式碼。

void setup(){
    pinMode(13, OUTPUT);
}

void loop(){
     digitalWrite(13, HIGH);
     delay(1000);
     digitalWrite(13, LOW);
     delay(1000):
}

初學常見錯誤原因:
1. 在 loop() 函式寫完後少了大括弧。
2. 指令拼寫錯誤,例如,digitalWrite() 寫成 digitalwrite。
3. 缺手分號結尾:幾乎每一行敘述後面都要加上分號。

裡面的函數可以自己改改看喔~~ 看看會發生什麼變化。

以下為講解影片LED閃爍的講解影片~~




有什麼問題或建議,可以在留言區留言呦~~

留言