2014/11/16

Arduino - ソースコードを複数ファイルに分割して記述する

Arduino,はじめました

かなり今更ですが,最近になってArduinoを触り始めました. Arduinoと言っても,基板は買わずにATmega328Pを買ってきて,ブートローダと開発環境だけを使用しています. 参考書なども買っていないため,インターネットで調べつつ試行錯誤しています.

最初に躓いたのは,ソースコードを複数ファイルに分割して記述する方法についてです. Arduino Build Processでも説明されていますが,備忘録として記述しておこうと思います.

ソースコードを複数ファイルに分割して記述する
サンプルプログラム

説明に使用するサンプルプログラム,led_test.inoです. PIN_LEDで指定したデジタル入出力ピンのLEDを点滅させるプログラムです. LEDを接続する際は,電流制限用抵抗を忘れずに挿入してください.

今回は,loop()関数内の32~35行目の処理を関数化し,別ファイルに記述します.

新規タブを作成する

Arduinoでは,1つのスケッチで複数ファイルを扱うとき,各々を「タブ」と呼ぶようです. 新規タブは,ウィンドウ右側のアイコンをクリックすると表示されるメニューから作成できます. 私は最初これを知りませんでした….


Arduino

ウィンドウ下部に表示されるテキストボックスで,新規タブ名を指定します. Arduino Build Processによれば,タブとして扱うことができるファイルは,拡張子なし,.c,.cppまたは.hのいずれかのようです. しかし,私の使用しているArduino 1.0.5-r2では,このテキストボックスで拡張子を指定しなかった場合,拡張子は.inoになります. 1つのスケッチで,複数の.inoファイルが扱えるようです.

関数を記述するのであれば,C++言語ライクではなくC言語ライクに書くのであっても,個人的には拡張子は.cppを指定すれば良いと思います. 今回は拡張子を指定しませんでしたので,led_func.inoというファイルがスケッチフォルダに新規作成されました.


Arduino
ソースコードを編集する

上記のサンプルプログラムを分割して記述した例を示します. loop()関数内の32~35行目の処理を,led_func()関数として関数化しています. このように関数化やファイル分割を行うことで,ソースコードの再利用性が向上します.

下記は既存タブのled_test.inoです.

下記は新規タブのled_func.inoです.

なお,関数のプロトタイプ宣言は,Arduinoにおいてはコンパイル時に自動挿入されるため,必要ありません. また,作成したタブが拡張子.hのヘッダファイルでない限り,#includeの記述も必要ありません. しかし,これらにも例外があります. 詳細については,別記事「Arduino - typedef宣言を使用する際の注意」をご覧ください.

追加情報

よりC/C++言語ライクに記述したい場合は,Arduino - ソースコードを複数ファイルに分割して記述する(2)をご覧ください.

製品紹介

0 件のコメント:

コメントを投稿