函式宣告

将程式码分割成多个函式区块可以让程式设计师更容易将程式码模组化,程式设计师可以将任务还有回传值定义在一个函式区块中,再让其他程式来 ”呼叫” 它们。传统的用法是,当在程式码内需要多次某种相同动作时就创建一个函式。

给习惯用 BASIC 的程式设计师,在 86Duino 中的函式提供 (还有扩充) 了一些子程式 (BASIC 中的 GOSUB)。

将程式码分割成函式具有下列几个优点:

  • 函式让程式码本身更具组织性,也让程式码变的较概念化。
  • 函式让一个动作被撰写在一个地方,所以这个函式只需要思考与除错一次就可以了。
  • 这也减少在修改程式码过程中发生错误的机率。
  • 函式让整个程式码变的比较小且紧密,因为再利用率变高了。
  • 这样让再次利用别的程式码变得更容易也更模组化,副作用更少,还有可读性变更好。

setup()loop() 是 Aruino 及 86Duino 必备的两个函式,其他的函式必须创建在这两个函式之外。举个例子,我们建立一个简单的函式去将两个数字相乘。

范例

FuncAnatomy

“呼叫” 一个简单的乘法函式,我们传给它预想中的资料形态参数:

void loop{
  int i = 2;
  int j = 3;
  int k;

  k = myMultiplyFunction(i, j); // k 的数值现在是 6
}

函式需要被宣告在任何的函式之外,因此 “myMultiplyFunction()” 要被宣告在 ”loop()” 上面或者下面。

整个程式码会像这样:

void setup(){
  Serial.begin(9600);
}

void loop() {
  int i = 2;
  int j = 3;
  int k;

  k = myMultiplyFunction(i, j); // k 的数值现在是 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);    // 感测器在类比 pin 0
  }

  sval = sval / 5;    // 平均
  sval = sval / 4;    // 限制在 8 bit 中 (0 ~ 255)
  sval = 255 - sval;  // 转换输出
  return sval;
}

呼叫我们的函式只需要指派一个变数给它。

int sens;

sens = ReadSens_and_Condition();

语法参考主页面

本页由热血青年 LBU 译自英文版。

The text of the 86Duino reference is a modification of the Arduino reference, and is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.