ライブラリを使う
前項では、サンプルプログラム「HelloWorld」をオンラインIDEのワークスペースにインポートして、そのままコンパイルとコピーを行い動作させました。
オンラインIDEのワークスペースで「HelloWorld」の左のツリーを展開してみましょう。
「main.cpp」はC++言語で書かれたソースです。開いて見てみると、空行を除いて10行のシンプルなソースです。
#include "mbed.h"
DigitalOut myled(LED1);
int main() {
while(1) {
myled = 1;
wait(0.2);
myled = 0;
wait(0.2);
}
}
ソースの先頭行「#include "mbed.h"」で、mbedライブラリのヘッダファイルを取り込んでいます。これは、mbedを制御するためのプログラムを自力で開発しなくても、すでにある公開された実績のあるライブラリを使用できることを意味します。
このように、プログラムやライブラリをオンラインIDEで検索し、自分のワークスペースにインポートしてすぐに利用できるため、mbedで手軽にプログラミングしてみたい方にとって、オンラインIDEは、うってつけのツールです。
プログラムとライブラリについて
ライブラリも、プログラムであることに変わりはありません。プログラムは文脈によって、人間が書いたり読んだりするソースコード(例えば「HelloWorld」のmain.cpp)のことを指す場合もありますし、ソースコードをコンパイルしてバイナリ変換された実行可能ファイルのことを指す場合もあります。ここでのライブラリとは、汎用性がある目的を達成するために、共通の機能として、ほかのプログラムから利用できるようにまとめられたソフトウェアの部品のことと理解するくらいでよいでしょう。
無限ループについて
whileの丸かっこ「()」の中には繰り返し条件を書きます。CやC++では、条件式が0なら偽(false)、0以外なら真(true)を表します。サンプルプログラム「HelloWorld」の「while(1)」は常にtrueになるため、whileブロック(中かっこ{}で囲まれた部分)内のステートメントを無限にループする動きです。後述する書き換え後のソースでは、while(true)と書きました。このほうが直感的に分かりやすくなります。
サンプルプログラムを変更して動作を変える
最後に、先ほどワークスペースにインポートした「HelloWorld」のソースを変更して、動作を変えてみましょう。
同じくLEDを点滅させるプログラムですが、モールス信号のSOS(・・・---・・・トトトツーツーツートトト)のリズムで点滅させてみることにします。
新しいプログラムを作成する。
「HelloWorld」をテンプレートにして、新しいプログラムを作成します。オンラインIDEのメニューから「New」をクリックし、表示された「Create new program」ダイアログの「Program Name:」の値を"mbed_blinky"から"mbed_blinky_sos"に書き換えてから「OK」をクリックします(図16はプログラム名を書き換える前の図です)。
ソースを変更する
プログラムの「main.cpp」を開き、下の例のようにソースを書き換えて保存します。
保存は、オンラインIDEの「Save」をクリックするか、キーボードの[Command]+[S](Windowsなら[Ctrl]+[S])キーを押下します。編集中でまだ保存されていないときは、オンラインIDEの「Program Workspace」のファイル名の右横に*印が表示されます。
#include "mbed.h"
DigitalOut myled(LED1);
//短音
void shorttone()
{
myled = 1;
wait(0.1);
myled = 0;
wait(0.05);
}
//長音
void longtone()
{
myled = 1;
wait(0.3);
myled = 0;
wait(0.1);
}
//休み
void waiting()
{
myled = 0;
wait(1.0);
}
//sは短音3回、oは長音3回
void morse(char val)
{
switch (val)
{
case 's':
shorttone();
shorttone();
shorttone();
break;
case 'o':
longtone();
longtone();
longtone();
break;
default:
waiting();
break;
}
}
int main()
{
while(true)
{
morse('s');
morse('o');
morse('s');
morse('0'); //wait
}
}
コンパイルする
ソースを作成・更新したときは、コンパイルを行わないと、実行可能なプログラム(バイナリファイル)ができません。オンラインIDEのメニューから「Compile」をクリックしましょう。
正常にコンパイルが通れば、バイナリファイル(mbed_blinky_sos_LPC1768.bin)をダウンロードできます。
コンパイルエラーが起きたら
コンパイルエラーが起きると、エラー詳細、エラー番号、およびコンパイラがエラーと判断したソースコードの位置が出力されます(図17)。
エラー番号のリンクをクリックすると、該当するエラー番号のCookBook(エラーの内容や対処方法の参考情報)を参照することができます(図18)。
なお、今回はソースコードの3行目の「LED1」を「LED5」に書き換えてわざとエラーを表示させました。エラー詳細のメッセージだけで、「LED5」が未定義のため発生したエラーだと分かりますね。
エラーの原因が分かったらソースコードを修正して、コンパイルしなおしましょう。
動作を確認する
バイナリファイル(mbed_blinky_sos_LPC1768.bin)をMBEDドライブにコピーして、基板中央のリセットボタンを押してみましょう。うまくいけば「HellowWorld」で動作確認したときと同じLEDが、今度はSOSのリズムで点滅するはずです。
MBEDドライブ内のファイル管理について
MBEDドライブ内に複数のバイナリファイルがあるときは、変更日時の新しいものが優先的に動きますので、複数ファイルを格納しても容量(最大約2GB)に収まる範囲内であれば問題ありません。不要なファイルはUSBメモリ内のファイルと同様、OSからの操作で削除できます。また、最初から格納されていたMBED.HTMを誤って消しても、リセットすれば復活しますのでご安心を。
第1回のまとめ
連載第1回では、mbedの概要とオンラインIDEの使い方をご紹介し、最後に簡単なプログラムを作成して動かすところまでを行いました。
次回は、アプリケーションボードでmbedを拡張し、クラウド上のサーバで、mbedからセンサデータを受信できるところまでを実践します。関連技術としてMQTTという軽量なプロトコルや、JSONというデータフォーマットについても学習する予定です。お楽しみに!
