スケッチでの関数の定義方法と使用方法を学ぶ

スケッチでの関数の定義方法と使用方法を学びます。


LAST REVISION: 2022/08/19 17:23


コードを関数に分割することで、プログラマはモジュール化されたコードを作成することができます。モジュールは、定義されたタスクを実行し、その関数が呼ばれた場所に戻ります。関数を作成する典型的な事例は、プログラム内で同一のことを複数回実行する必要があるときです。

BASICになれたプログラマにとっては、Arduinoでの関数はサブルーチン(BASICでのGOSUB)を提供し、さらに拡張します。

コードの断片を関数にすることはいくつかの利点があります。

  • 関数はプログラマを組織化した状態にします。プログラムを概念化するのに役立ちます。
  • 関数は一つのアクションを1か所にコード化するので、一度だけ考えデバッグすればいいです。
  • コードの変更が必要な場合でも、修正時のエラーの混入の機会を削減します。

コードのセクションは何度も再利用されるので、関数はスケッチ全体を小さくコンパクトにすることができます。モジュール化をさらに進めることで、他のプログラムでの再利用性も高まります。さらに、関数を使うことでコードが読みやすくなります。Arduinoのスケッチでは、setup()とloop()という2つの関数が必要です。他の関数はこれら2つの関数の括弧({})の外で定義されます。例えば、2つの数字の積を求める簡単な関数を作ってみましょう。

我々の簡単なかけ算関数を呼ぶには、要求される型を持つパラメータを渡します。

1
2
3
4
5
6
void loop(){
  int i = 2;
  int j = 3;
  int k;
  k = myMultiplyFunction(i, j); // k now contains 6
}

関数は全ての関数の外側で定義する必要があります。このため、myMultiplyFunction()はloop()関数の前でも後でも定義することができます。

スケッチの全体像は以下のようになります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
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()を使ってセンサから5回値を読み、5回の読取の平均を計算します。次に、データを8ビット(0-255)に変換し、反転し、反転した値を返却します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
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;
}

この関数を呼ぶには、単に変数に代入します。

1
2
3
int sens;

sens = ReadSens_and_Condition();

見てわかるとおり、関数に引数が不要な場合でも、返り値がない場合でも、()と;が必要です。

オリジナルのページ

https://docs.arduino.cc/learn/programming/functions

最終更新日

November 25, 2022

inserted by FC2 system