【Arduino便利技】複数のファイルを作成する方法[分割・Arduinoライブラリ呼び出し編]

ArduinoのIDEを起動すると.inoファイルが自動で作成されますが、ヘッダーファイルやC言語のファイルを追加したいときがあると思います。

今回はArduinoで複数のファイルを作成する方法と作成したC++ファイルからArudinoライブラリを呼び出す方法を解説します。

ファイルの作成

ヘッダーファイル作成

まずはヘッダーファイルを追加していきます。

Arduino IDEを開いたら、[▼]のボタンをクリックします。

[新規タブ]を選択します。

新規ファイル名を入力して[OK]ボタンをクリックします。

これで追加できました。

C言語ファイルの作成

ヘッダーファイルの作成と同じ要領で、ファイル名を.cにするとC言語のファイルを追加できます。
ただし、C言語でファイルを追加してしまうとコンパイルエラーが発生するため、C++で追加したほうがいいです。

今回は.cppの拡張子で追加します。

コードの実装と実行結果

コードの実装

今回はint型の配列を渡すと合計値を返す関数test.cppに実装します。

まずは、メイン関数があるファイルです。

#include"test.h"

void setup() {
  int tempArray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  Serial.begin(9600);

  // 配列の合計を表示する
  int count = Sum(tempArray, 10);
  Serial.print(count);

}

void loop() {
}

続いて、test.hです。

#ifndef TEST_H
#define TEST_H

int Sum(int* data, unsigned char dataSize);

#endif

最後にtest.cppです。

#include "test.h"

int Sum(int* data, unsigned char dataSize){
  int sum = 0;
  for (int i = 0; i < dataSize; i++) {
    sum += data[i];
  }
  return sum;
}

実行結果

実行結果です。

しっかり、test.cppのSum関数が呼び出せています。

作成したC++ファイルからArduinoライブラリを呼び出す

つづいて、追加したC++のファイルからArduinoのライブラリ関数を呼び出す方法を紹介します。
Arduinoライブラリには、シリアル通信の関数やSPI通信のライブラリなど便利なものがたくさん入ってます。
Arudinoライブラリの関数などは、こちらのサイトを参考にしてください。

また、inoファイルで作成したファイルならこの手順は必要ないです。

呼び出し方法

呼び出すのは簡単です。
Arduino.hをインクルードするだけです。
今回は先ほどのtest.cppを改修して呼び出します。

#include <./Arduino.h>
#include "test.h"

int Sum(int* data, unsigned char dataSize){
  int sum = 0;
  for (int i = 0; i < dataSize; i++) {
    sum += data[i];
    // 計算経過を表示する
    Serial.println(sum);
  }
  return sum;
}

メイン関数も少し改修して実行したいと思います。

#include"test.h"

void setup() {
  int tempArray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  Serial.begin(9600);

  // 配列の合計を計算する
  int count = Sum(tempArray, 10);
}

void loop() {
}

実行結果

実行結果です。

ばっちり呼び出せてます。

まとめ

今回はArduinoで複数のファイルに分割する方法と、分割したC++ファイルからArduinoライブラリを呼び出す方法をご紹介しました。
Arduinoは簡単な組み込みシステムを検証するときに重宝します。しかし、メイン部分で膨大なコードを記述してしまうと、本来検証したいこと以前にトレースが難しくなってしまいます。
Arduinoもソースコードを分けて記述することができますでので、是非お試しください。

組み込み技術
あっつんをフォローする
Bell IT Blog
PAGE TOP
タイトルとURLをコピーしました