將程式碼分割成多個函式區塊可以讓程式設計師更容易將程式碼模組化,程式設計師可以將任務還有回傳值定義在一個函式區塊中,再讓其他程式來 ”呼叫” 它們。傳統的用法是,當在程式碼內需要多次某種相同動作時就創建一個函式。
給習慣用 BASIC 的程式設計師,在 86Duino 中的函式提供 (還有擴充) 了一些子程式 (BASIC 中的 GOSUB)。
將程式碼分割成函式具有下列幾個優點:
- 函式讓程式碼本身更具組織性,也讓程式碼變的較概念化。
- 函式讓一個動作被撰寫在一個地方,所以這個函式只需要思考與除錯一次就可以了。
- 這也減少在修改程式碼過程中發生錯誤的機率。
- 函式讓整個程式碼變的比較小且緊密,因為再利用率變高了。
- 這樣讓再次利用別的程式碼變得更容易也更模組化,副作用更少,還有可讀性變更好。
setup()
與 loop()
是 Aruino 及 86Duino 必備的兩個函式,其他的函式必須創建在這兩個函式之外。舉個例子,我們建立一個簡單的函式去將兩個數字相乘。
範例
“呼叫” 一個簡單的乘法函式,我們傳給它預想中的資料形態參數:
void loop{ int i = 2; int j = 3; int k; k = myMultiplyFunction(i, j); // k now contains 6 }
函式需要被宣告在任何的函式之外,因此 “myMultiplyFunction()
” 要被宣告在 ”loop()
” 上面或者下面。
整個程式碼會像這樣:
void setup(){ Serial.begin(9600); } void loop() { int i = 2; int j = 3; int k; k = myMultiplyFunction(i, j); // k now contains 6 Serial.println(k); delay(500); } int myMultiplyFunction(int x, int y){ int result; result = x * y; return result; }
其他範例
這個函式會藉由 analogRead()
讀取一個感測器五次並且計算五次讀取值的平均。它把資料限制在 8 bit 之中 (0 到 255),並回傳計算後的結果。
int ReadSens_and_Condition(){ int i; int sval = 0; for (i = 0; i < 5; i++){ sval = sval + analogRead(0); // sensor on analog pin 0 } sval = sval / 5; // average sval = sval / 4; // scale to 8 bits (0 - 255) sval = 255 - sval; // invert output return sval; }
呼叫我們的函式只需要指派一個變數給它。
int sens; sens = ReadSens_and_Condition();
語法參考主頁面
86Duino 參考的文本是根據 Creative Commons Attribution-ShareAlike 3.0 License,部分文本是從 the Arduino reference 修改的。 參考中的代碼示例已發佈到公共領域。