Arduino IDEでは、スケッチ(.inoファイル)を複数ファイルに分割することができます。
例えば、編集頻度の少ない関数と、頻繁に編集する「setup()」「loop()」を別ファイルにすることで、スケッチを見やすくすることができます。
ここでは、スケッチを分割する方法について説明します。
- Arduino IDEウィンドウの右上にある「▼」をクリックし、「新規タブ」を選択します。
- 画面下の「新規ファイルの名前」でファイル名を入力し、「OK」をクリックします。この際、ファイル名には拡張子を付けません。ここで「.h」「.cpp」などの拡張子を付けると、この後のArduino IDEでの処理内容が変わってきます。
- 新規ファイルのタブが追加されます。
- スケッチのフォルダの中を見ると、.inoファイルがふたつに増えています。
スケッチの一部を、新規につくったタブに移動させることで、スケッチが見やすくなります。
なお、「Sketch build process」の「Pre-Processing」の項によると、このようにしてつくった、複数ファイルに分かれたスケッチをコンパイルする際、Arduino IDEは単純に複数の.inoファイルを連結するようです。
連結順は、「フォルダ名と同じ名前の.inoファイル」→「アルファベット順」となります。
スケッチを複数ファイルに分割した時、「#include」「#define」「グローバル変数」がどのように扱われるのか確認してみました。
以下のようなスケッチ(top.ino)を準備しました。
#include <M5Stack.h>
#define DELAYTIME 1000
int count = 0;
void setup() {
M5.begin();
M5.Lcd.setTextSize(3);
}
void loop() {
displayMessage();
}
void displayMessage() {
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setCursor(0, 0);
M5.Lcd.printf("COUNT : %d", count++);
delay(DELAYTIME);
}
M5StackのLCD画面に、一定時間の間隔で、1ずつカウントアップした数字が表示されます。
LCD画面表示の際に必要となるM5Stackライブラリ(M5Stack.h)は「#include」で、画面表示間隔(DELAYTIME)は「#define」で、表示する数字(count)は「グローバル変数」で、それぞれtop.inoファイルの先頭部分に定義されています。
このスケッチをM5Stackに読み込ませると、所望のとおりに動作します。
次に、上記の方法で「sub.ino」ファイルをつくり、そこに「displayMessage()」関数のみを移動します。
top.inoファイルは以下のようになります。
#include <M5Stack.h>
#define DELAYTIME 1000
int count = 0;
void setup() {
M5.begin();
M5.Lcd.setTextSize(3);
}
void loop() {
displayMessage();
}
sub.inoファイルは以下のようになります。
void displayMessage() {
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setCursor(0, 0);
M5.Lcd.printf("COUNT : %d", count++);
delay(DELAYTIME);
}
このスケッチをM5Stackに読み込ませると、先ほどと同じく、所望のとおりに動作します。
sub.inoファイルの中で「M5Stackライブラリ(LCD画面表示)」「DELAYTIME」「count」が使われており、それらはいずれもtop.inoファイルで定義されていますが、これで問題なく動作しています。
sub.inoファイルで、改めてライブラリをインクルードしたりする必要はなく、先頭(フォルダ名と同じファイル名)の.inoファイルのみで定義しておけば良いようです。