Arduinoチュートリアル 基礎編


関数

原文

コードを機能ごとに分割して特定の仕事をこなすモジュールを作ることができます。このモジュールを関数(function)と呼びます。関数の典型的な使い道は、スケッチのなかで何度も行われる処理をひとつにまとめることです。関数を「コール」すると処理が実行され、またコールしたところへ戻ってきます。

コードを関数化することのメリットはいくつもあります。

・関数を使うことでプログラマは秩序立った状態を保てます。
・関数は同じ処理を同じ場所に集約します。同じことを何度も考えたり、繰り返しデバッグする必要がなくなります。
・このことはプログラムの修正時にエラーを出す確率も減らします。
・関数はスケッチのサイズを小さくします。コードが集約されるのでメモリの使用効率がよくなります。
・モジュラ化によってコードを他のプログラムで再利用することが容易になります。また、それによってコードが読みやすくなるという効果も生じます。

【例1】

2つの数字のかけ算をする簡単な関数を作ってみましょう。

int multiply(int x, int y) {

  int result;

  result = x * y;
  return result;
}

最初のintはこの関数が返す値の型です。なにも返さないときはvoidになります。mutiplyがこの関数の名前です。その後ろの(int x, int y)は、この関数に渡されるパラメータ(引数)で、int型の整数が2つという意味です。波カッコに囲まれた部分が、この関数の処理を記述しています。最後の行のreturnでresultが戻り値であることを指定しています。一番最初に定義した戻り値の型(int)と、resultの型は一致しています。

この関数を呼び出す(コール)ときは、次のようにします。

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

  k = multiply(i, j);  // kは6に
}

関数に渡す変数iとjの型が、関数を定義したときのパラメータの型(int x, int y)と同じになっているところが大事です。

関数は、関数の外側で定義します。スケッチ全体は次のようになりました。multiply()を定義する位置は、loop()の前でも後でもかまいません。

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

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

  k = multiply(i, j); // k now contains 6
  Serial.println(k);
  delay(500);
}

int multiply(int x, int y) {
  int result;
  result = x * y;
  return result;
}


【例2】

この関数はanalogRead()を使ってセンサの値を5回読み、平均を求めます。そして、8ビット(0〜255)の範囲に変換して返します。

int ReadSens_and_Condition(){
  int i;
  int sval;

  for (i = 0; i < 5; i++){
    sval = sval + analogRead(0);  // アナログ入力ピン0のセンサから
  }

  sval = sval / 5;    // 平均
  sval = sval / 4;    // 8ビット化(0 - 255)
  return sval;
}

この関数は次のように呼び出せます。

int sens;

sens = ReadSens_and_Condition();


[目次へ戻る]

Creative Commons Attribution-ShareAlike 3.0 License.
このドキュメントはArduino Teamにより執筆され、Takumi Funadaが翻訳し、一部加筆修正したものです
ご意見はtf at musashinodenpa.comまでお送りください [ドキュメント一覧]