ArduinoIDEでライブラリ自作方法!
内容としては以下1~6項目ですが、実質1~4項目で作れます!
サンプルプログラム : プログラム例を元に一部をライブラリ化
ヘッダファイル : 必須ファイル1(クラス・関数等の名前を決める)
ソースファイル : 必須ファイル2(関数の内容等を記入)
ライブラリの使い方 : 作ったライブラリの使い方
キーワードファイル : 補足ファイル1(ライブラリのコードをハイライト!)
サンプルプログラム : 補足ファイル2(配布する時はサンプルプログラムも!)
APIスタイルガイドを参照ください。
1. サンプルプログラム
1.1 例
図1プログラムは、実行すると13ピンに接続されたLEDを点滅させSOS(遭難信号)のモールス信号を出力します。
このプログラムを例に、以下①~③についてライブラリ化を行います。
①実際に点滅するdot関数とdash関数
②どのピンをLED出力に使用するかを決定するために関数が使用するPin変数
③ピンを出力として初期化するpinMode関数
int pin = 13;void setup(){pinMode(pin, OUTPUT);}void loop(){dot(); dot(); dot();dash(); dash(); dash();dot(); dot(); dot();delay(3000);}void dot(){digitalWrite(pin, HIGH);delay(250);digitalWrite(pin, LOW);delay(250);}void dash(){digitalWrite(pin, HIGH);delay(1000);digitalWrite(pin, LOW);delay(250);}
図1:ライブラリ変換前のプログラム例
1.2 ライブラリに必要なファイル
ライブラリには、少なくとも以下2つのファイルが必要です。
〇ヘッダファイル(拡張子.h)
ライブラリの定義を記入します。これは内部にあるすべてのもののリストです。
〇ソースファイル(拡張子.cpp)
実際に仕事をする関数を記入します。
2. ヘッダファイル
2.1 クラス
モールス(Morse)信号のライブラリと言う事で、ヘッダファイル名を「Morse.h」とします。
ヘッダファイルを作成するには、ArduinoIDE画面(一番上の図)右上にある「▼」ボタンをクリック → 「新規タブ」 → 「新規ファイルの名前:」欄に「Morse.h」と入力します。
ヘッダーファイルのコアは、ライブラリ内の各関数の行で構成され、必要な変数と共に図2の様にクラス※1にまとめられます。
※以下補足です
※1:クラスとは、関数と変数の集合であり、すべてが1つの場所にまとめられている設計図の事。またクラス(設計図)のインスタンス※2(実体)を作成するために使用されるコンストラクタ※3という特別な関数があります。コンストラクタ※3はクラスと同じ名前で戻り型はありません。
class Morse{public:Morse(int pin);void dot();void dash();private:int _pin;};
図2:クラスの構造
2.2 インクルード
#include "Arduino.h"
図3:Arduino.hのインクルード
2.3 ヘッダーファイルの構造
ヘッダーファイル全体を、図4の構造で包みます。
これで#includeが作ったライブラリを2回インクルードしてしまう問題を防ぐことができます。
#ifndef Morse_h#define Morse_h//ここに#include文とプログラムがあります。#endif
図4:ヘッダーファイルの構造
2.4 完成したヘッダーファイル
最後に、ライブラリの一番上に「ライブラリ名・簡単な説明・作成者名、日付、ライセンス」等のコメントを図5の様に付けて完成です。
/*Morse.h - Library for flashing Morse code.Created by David A. Mellis, November 2, 2007.Released into the public domain.*/
#ifndef Morse_h#define Morse_h#include "Arduino.h"class Morse{public:Morse(int pin);void dot();void dash();private:int _pin;};#endif
図5:完成した「ヘッダーファイル」
3. ソースファイル
今回は、ユーザーが信号出力に使用したいピンを指定します。
また他の関数で使用するためにプライベート変数に保存します。
Morse::Morse(int pin){pinMode(pin, OUTPUT);_pin = pin;}
図7:コンストラクタ
3.3 関数の登録
ライブラリ化する1.1.①関数を、図8の通り関数の名前の前に「Morse ::」を付け、変数名pinの前に「_」を付け変えて記入します。
〇「Morse ::」
これは、関数がMorseクラスの一部であることを示しています。
クラス内の他の関数でもこれが再び表示されます。
〇「_」(アンダースコア)
プライベート変数「_pin」に付くアンダースコアは、ヘッダーファイルの定義と一致する限り、実際に任意の名前を持つことができます。
名前の先頭にアンダースコアを追加するのは、どの変数がプライベートであるかを明確にし、関数の名前(この場合はpin)と名前を区別するための共通の規則です。
void Morse::dot(){digitalWrite(_pin, HIGH);delay(250);digitalWrite(_pin, LOW);delay(250); }void Morse::dash(){digitalWrite(_pin, HIGH);delay(1000);digitalWrite(_pin, LOW);delay(250);}
図8:関数のライブラリ化
3.4 完成したソースファイル
最後に、ソースファイルの先頭にコメントヘッダを含めるのが一般的です。
ソースファイルの全体は図9の通りです。
/*Morse.cpp - Library for flashing Morse code.Created by David A. Mellis, November 2, 2007.Released into the public domain.*/#include "Arduino.h"#include "Morse.h"Morse::Morse(int pin){pinMode(pin, OUTPUT);_pin = pin;}void Morse::dot(){digitalWrite(_pin, HIGH);delay(250);digitalWrite(_pin, LOW);delay(250); }void Morse::dash(){digitalWrite(_pin, HIGH);delay(1000);digitalWrite(_pin, LOW);delay(250);}
図9:完成した「ソースファイル」
4. ライブラリの使い方
4.1 ライブラリのインストール
ArduinoIDEを起動し、メニュー → スケッチ → ライブラリをインクルードの順に開くと、一覧中にMorseが表示されます。
ライブラリが表示されていない場合は、ファイルの拡張子が「.cpp」と「.h」で終わることを確認してください。(例えば「.pde」または「.txt」拡張子を付けない)
4.2 ライブラリの使用例
1.1でインストールしたライブラリを使って図1プログラムを書き直したものが図10です。
図1プログラムの一部がライブラリに移動したという他にも、図10プログラムにはいくつかの違いがあります。
違いを4.3~4.5に示します。
#include <Morse.h> /*一番上の図の様に、インストールせずにヘッダ・ソースファイルを新規タブとしてプログラムに付けていれば 「”Morse.h”」と記入*/Morse morse(13);void setup(){}void loop(){morse.dot(); morse.dot(); morse.dot();morse.dash(); morse.dash(); morse.dash();morse.dot(); morse.dot(); morse.dot();delay(3000);}
図10:完成したライブラリを使った「プログラム」
4.3 #include文
最初に、図10プログラムの先頭に#include文を追加しています。
これにより、ボードにMorseライブラリも送信される様になり、このライブラリをプログラムから利用可能になります。
プログラムでライブラリが不要になったら、#include文を削除してメモリ領域を節約する必要があります。
4.4 インスタンス作成
Morse morse(13);
Morse morse2(12);
図12:Morseクラスのインスタンス(morse2)を引数「_pin=12」で作成
4.5 dot関数とdash関数
最後に、13ピンにドット出力であれば「morse.dot();」、12ピン出力にダッシュ出力であれば「morse2.dash();」の様に、Morseライブラリの関数(dot、dash)を呼び出します。
5. 補足:キーワードファイル
ArduinoIDEにはソースコードのハイライト(シンタックスハイライト)機能が備わっており、自作したライブラリの関数に対して何色で表示するかを指定する事が出来ます。
※このファイルが無くてもライブラリは動作しますが、関数がハイライトされていないと、書いた関数がIDEに認識されているかどうか心配になります
5.1 ファイル作成
Morseディレクトリにkeywords.txtというファイルを作成します。
5.2 記入方法
作成したファイル中には図13の様に記入します。
各行には「キーワード名 → タブ(スペースではない) → キーワードの種類※4」の順序で記入します。
※4:キーワードの種類:KEYWORD1:オレンジ色、KEYWORD2:茶色
キーワードファイル作成後、コードにハイライトを反映させる為には、ArduinoIDEを再起動させる必要があります。
Morse KEYWORD1dash KEYWORD2dot KEYWORD2
図13:キーワードファイルの記入例
6. 補足:サンプルプログラム
自作のライブラリを人々に提供する場合、プログラムの例を付けるとより分かり易いです。
6.1 examplesディレクトリ作成
6.2 プログラム例のコピー
※5:SOSは、ArduinoIDEメニューから、「スケッチ → スケッチのフォルダを表示」をクリックして見つけることができます。
6.3 確認
ArduinoIDEを再起動し、メニューから「ファイル → スケッチの例 → > Examplesメニューの中」に作成したライブラリの項目が表示され、これにはプログラム例を含んでいます。
ライブラリの使い方をよりよく説明するコメントを追加することもできます。
キーワードと例を含むライブラリが完成し、それをチェックアウトしたい場合、Morse.zipとしてそれをダウンロードする事ができます。
7. まとめ
自作ライブラリが作れれば煩雑なプログラムもスッキリします!