プログラミング① anchor.png

Warning.png

「AX-S1の赤外線反射センサに泥棒が反応したら、AX-S1のブザーを鳴らして脅かす」というプログラムを作成します。

プログラムと言うと難しそうだと感じる方もいるかもしれません。しかし本キットは予め用意されたFREEDOMライブラリを使うことで、このプログラムを16行で書くことができます。

FREEDOMライブラリとは、FDIII-HCのための関数を集めたものです。FDIII-HCを使うに当たって必要だと思われるプログラムが予め用意され、ユーザーはその関数名を書くだけで簡単にプログラミングが可能になります。

Page Top

処理の流れを図にする anchor.png

プログラミングを始める前に処理の流れを図にしましょう。

Warning_p1.png

スタートから始まり、先ず赤外線反射センサの値を見ます。赤外線反射センサの値をある値(泥棒が来たと判断される値)と比較し、それ以上ならブザーをならし、それ以下ならブザーは鳴りません。その後、再び赤外線反射センサの値取得に戻ります。

今後この図を元にプログラミングを行います。悩んだら見返しましょう。

Page Top

準備 anchor.png

ソフトウェアのインストールは終わっていますか?まだの方はChapter1.2のソフトウェアの準備を見て下さい。

write1.png

デスクトップのGCC Developer LiteのショートカットをダブルクリックしてGCC Developer Liteを起動します。

Warning_p1_2.png

GCC Developer Liteの青いエリアにプログラムを書いて行きます。プログラムは半角英数で入力します。大文字と小文字を区別して下さい。
最初から[EOF]と書いてありますが、これはファイルの終わりを示すものですので気にせず入力して下さい。

Page Top

FREEDOMライブラリを使えるようにする anchor.png

Warning_p2.png

既に説明した通り、FREEDOMライブラリには便利な関数が用意されています。この関数を使用できるようにするために先ず最初に

#include <fd.h>

と入力して下さい。


Warning_p3.png

fd.hという名前のファイルの中に色々な関数が書かれています。

#include <fd.h>と入力した行の上でCtrlボタンを押しながらダブルクリックするとfd.hを開くことができます。
まだfd.hの中身を理解する必要はありません。fd.hのウィンドウ右上の×ボタン(GCC Developer Liteウィンドウの×ボタンではありません)で閉じます。

Page Top

メイン関数 anchor.png

Warning_p4.png

メイン関数はその名の通り主となる関数です。プログラムはメイン関数内の上から順に実行して行きます。見やすくするために一行開けて

void main (void) {

}

と入力して下さい。 void main (void)の後ろの{から}の間にメイン関数の中身を書いて行きます。

Page Top

変数宣言 anchor.png

Warning_p5.png

これから赤外線反射センサの値を読み込むプログラムを書くのですが、読み込んだ値を保存しておく場所が必要になります。保存する場所として変数を使います。

メイン関数のvoid main (void)の次にある空の行にカーソルを移動します。メイン関数内であることがわかりやすいようにTabキーを使ってインデントでスペースを空けてから

uint8_t ReadData;

と入力して下さい(プログラムの書き方についてはChapter1.4のプログラムの書き方を参照して下さい)。

ReadDataは変数の名前です。
uint8_tは変数のですです。 これはC言語において通常使う型ではありません。赤外線反射センサ値などのFREEDOMライブラリで扱う値が、符号の無い8ビット(1バイト)単位であることを意味してFREEDOMライブラリではこのように書きます。通常のC言語で書くとunsigned charです。

Page Top

FREEDOMライブラリの初期化 anchor.png

Warning_p6.png

FREEDOMライブラリを使用するためには必ずメイン関数の初めに初期化をしなければなりません。 変数宣言の後、一行開けて

fd_Init (0, BT_CONSOLE, 0, 7.4);

と入力して下さい。
これはFREEDOMライブラリの初期化を行うための関数です。

Warning_p7.png

fd_Initは関数名です。

第1引数は、PCとの通信速度です。通常USBやBluetoothを使う場合は関係ありませんので0と書きます。

第2引数は、Bluetoothの通信方法です。BT_DISABLE(Bluetoothを使用しない)、BT_CONSOLE(パソコンと通信)、BT_RC100(別売りリモートコントローラRC-100と通信)から選択します。BT_CONSOLEに設定してもUSB通信を利用できますのでとりあえずBT_CONSOLEと書きます。

第3引数は、FDIII-HCのブザーを鳴らすです(AX-S1のブザーではありません)。今は使用しないので0と書きます。

第4引数はブザーがなる供給電圧の閾値です。バッテリを使用する場合に、残量が少ない事を知らせます。ここでは7.4と書いて供給電圧が7.4Vを切るとブザーがなるように設定します。但し、第3引数のブザーの設定をしていないので今はブザーは鳴りません。

Page Top

赤外線反射センサ値の取得 anchor.png

Warning_p8.png

初期化まで終われば準備は整いました。処理の流れを描いた図の通り、初めに赤外線反射センサの値を取得します。初期化の後、一行開けて

fd_DXReadByteData (100, 27, &ReadData);

と入力して下さい。 これはAX-S1やAX-12+から1バイト(8ビット)のデータを読み出すための関数です。

Warning_p9.png

fd_DXReadByteDataは関数名です。

第1引数は、DynamixelのIDです。AX-S1のIDは100です。

第2引数は、AX-S1コントロールテーブルのアドレスです。AX-S1の前方の赤外線反射センサ値のアドレスは27です。

第3引数は、読み出したデータを入れるための変数のアドレスです。変数の頭に&をつけるとその変数のアドレスという意味になります。AX-S1のコントロールテーブルのアドレスとは関係ありません。

Page Top

センサ値の表示 anchor.png

次に処理の流れを描いた図では取得したセンサの値とある閾値を比較するとなっていますが、そもそもセンサの値がどのような数値なのか分からないことには、閾値を決める事ができません。よって先ず取得したセンサの値を表示します。

Warning_p10.png

赤外線反射センサを取得した関数の後に

fd_printf("%3d\r", ReadData);

と入力して下さい。 fd_printfはパソコンに文字列を表示するための関数です。
%3dの部分にReadDataの値が3桁で表示されます。

Page Top

繰り返し anchor.png

Warning_p11.png

このままでは一回センサの値を取得して表示するとプログラムが終わってしまいます。センサ値取得と表示の部分をwhileで囲って繰り返し実行するようにします。

while (1) {
 fd_DXReadByteData (100, 27, &ReadData);
 fd_printf("%3d\r", ReadData);
}

whileで囲ったらその間の行はTabキーで字下げしましょう。 whileは()内の条件がtrue(正)なら{}内を繰り返す関数です。true=1ですのでここでは{}内を無限に繰り返すという意味になります。

Page Top

センサ値をパソコンで表示する anchor.png

ここまで書くと既に動くプログラムができ上がっています。FDIII-HCにプログラムを書き込んで実際に動かしてみましょう。

ここでは書き込み方法を簡単に説明します。詳細はChapter1.3の動作確認を参照して下さい。

  • 機器の接続はChapter2.2の組み立てを参照して下さい。
    FDIII-HCの電源をOFFにし、プッシュボタンを押しながらUSBケーブルを差し込む事を忘れないで下さい。
  • メニューの「ツール」→「コンパイルオプション」で「FREEDOM III library for FDIII-HC」を選択しOKをクリックします。
    但し既に一度サンプルプログラムを書き込んでおり、左下に「FREEDOM III library for FDIII-HC」と表示されている場合は必要ありません。
    Warning_p14.png
  • メニューの「コンパイル」→「ビルド」をクリックします。適当なファイル名(AlarmUnitなど)を入力し、適当なフォルダを選択して保存をクリックします。
  • コンパイルが成功したらOKをクリックします。自動的にSIMPLE TERMが起動します。コンパイルに失敗した場合はコンパイル失敗をご覧下さい。
  • SIMPLE TERMのメニューの「ファイル」→「プロパティ」をクリックし適切な設定を行います。
    詳しくはこちらをご覧下さい。 既に設定を行っている場合は必要ありません。
  • SIMPLE TERMのメニューの「通信」→「ポートオープン」をクリックします。
  • SIMPLE TERM上に
    --< FDIII Ver1.0 by BestTechnology >--
    と表示されることを確認してから、走る人マークをクリックします。
  • <SUCCESS>と表示されたらキーボードで「g」を入力しプログラムを実行します。
  • FDIII-HCの電源スイッチをONにします。このとき電源が供給されるとAX-S1のブザーが「ピッ」と鳴ります。

SIMPLE TERM上の最終行に数字が表示されているはずです。AX-S1の正面のセンサに手をかざし、数値が変動することを確認して下さい。

Warning_p13.png
Warning_p12.png

値はセンサの前に何もないと0、手を近づけて行くとだんだん増え、255まで増えるとそれ以上は増えなくなります。つまり値の範囲は0~255です。

Page Top

コンパイル失敗 anchor.png

Warning_p15.png

プログラムの書式に間違いがあると、コンパイルを行ったときにコンパイラログ(プログラムを入力する青いエリアの下)の最後に赤くコンパイル<失敗>と表示されます。
;や{が1つ足りないだけでもコンパイルに失敗します。入力ミスが無いかもう一度良く確認して下さい。

コンパイラログにピンク色で間違っている個所が表示されます。英語で書かれていますので、解らない場合はその行をダブルクリックすると間違っている個所にカーソルが移動します。
但し必ずしもその行内に間違いがある訳ではなく、その行に関係した箇所に間違いがあると考えて下さい。

どうしても間違いが見つからない場合は以下をコピーして貼り付けて下さい。

#include <fd.h>

void main (void) {
  uint8_t ReadData;

  fd_Init (0, BT_CONSOLE, 0, 7.4);

  while (1) {
    fd_DXReadByteData (100, 27, &ReadData);
    fd_printf("%3d\r", ReadData);
  }
}

それでもコンパイルに成功しない場合は、左下に「FREEDOM III library for FDIII-HC」又は「FREEDOM III library for FDIII-HC(Bootloader)」と表示されているかを確認して下さい。 表示されていない場合は、メニューの「ツール」→「コンパイルオプション」で「FREEDOM III library for FDIII-HC」又は「FREEDOM III library for FDIII-HC(Bootloader)」を選択しOKをクリックします。

Warning_p14.png

次のチャプターへ

FDIII-HC Starter Kit Guideへ戻る


Front page   Diff ReloadPrint View   Page list Search Recent changes   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Last-modified: 2011-02-02 (Wed) 19:29:27 (JST) (3641d)