NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

Arduino IDEの使い方(function・関数の自作編)

関数
 コード(プログラム)を機能ごとに分割して特定の仕事をこなすモジュールを作ることができます。このモジュールを関数(function)と呼びます。
 関数の典型的な使い道は、スケッチのなかで何度も行われる処理をひとつにまとめることです。関数を「コール」すると処理が実行され、またコールしたところへ戻ってきます。 
 
使用例
 Arduino IDEで使用する関数の使用例は以下の通りです。
 試しにこのプログラムを実行すると、1番ピンに電圧変化が有った時刻(マイコンが起動してから何ms経過したか)と、前回の電圧変化があった時刻からの経過時間(ms)がPCのシリアルモニター上に表示します。
volatile unsigned long Val[] = {0, 0, 0};

void setup() {
  attachInterrupt(digitalPinToInterrupt(1), In, CHANGE);//ピン割込時実行
  Serial.begin(9600);             //9600bpsでシリアルポートを開く
}

void loop() {
  Serial.print(Val[0]);            //最後に割込みピンに変化が有った時刻を出力します
  Serial.print(":");
  Serial.println(ElapsedTime(Val[0]));//前回の割込みから直近の割込みまでの経過時間
  delay(1000);                      //1000ms(1秒)待ちます
}

void In() {                        //値を返さない関数(割込み等)
  Val[0] = millis();             //ピンの状態が変化した時の時刻を変数に代入する
}

int ElapsedTime(unsigned long i) {  //値を返す関数(loop中で複数回使う時等)
  Val[2] = Val[1];              //前回の時刻Val[1]をVal[2]に保存
  Val[1] = i;                      //Val[1]の値を直近の時刻を更新して保存
  return Val[1] - Val[2];     //前回の割込みから直近の割込みまでの経過時間を出力
}
イメージ 1
図1:プログラム例
 
コードを関数化することのメリット
 ◯関数を使うことでプログラマは秩序立った状態を保てます。 
 ◯関数は同じ処理を同じ場所に集約します。同じことを何度も考えたり、
  繰り返しデバッグする必要がなくなります。 
 ◯このことはプログラムの修正時にエラーを出す確率も減らします。 
 ◯関数はスケッチのサイズを小さくします。コードが集約されるので
  メモリの使用効率がよくなります。 
 ◯モジュラ化によってコードを他のプログラムで再利用することが容易になります。
  また、それによってコードが読みやすくなるという効果も生じます。
 
イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【ArduinoIDE reference】目次に戻る