ページへ戻る

− Links

 印刷 

FDIII-HC Starter Kit Guide​/Chapter2.3 :: Besttechnology

knowledge:FDIII-HC Starter Kit Guide/Chapter2.3

ページ内コンテンツ
  • プログラミング1
    • 処理の流れを図にする
    • 準備
    • FREEDOMライブラリを使えるようにする
    • メイン関数
    • 変数宣言
    • FDIII-HCの初期化
      • fd_SetBeepCondition
      • fd_SetUVThreshold
      • DX_ChangeBaudrate
    • 赤外線反射センサの値の取得
      • DX_ReadByteData
    • センサ値の表示
      • fd_printf
    • 繰り返し
      • fd_Wait
    • プログラムを実行する

プログラミング1 anchor.png[1]

Warning_1.png

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

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

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

Page Top

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

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

flow.png

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

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

Page Top

準備 anchor.png[4]

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

gcc_icon.png

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

gcc_open.png

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

Page Top

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

gcc_edit_1.png

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


gcc_edit_2.png

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

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

Page Top

メイン関数 anchor.png[7]

gcc_edit_3.png

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

Page Top

変数宣言 anchor.png[8]

gcc_edit_4.png

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

メイン関数のvoid main (void)の次にある空の行にカーソルを移動します。メイン関数内であることがわかりやすいようにTabキーを使ってインデントでスペースを空けてから入力して下さい(プログラムの書き方についてはChapter1.4のプログラムの書き方[10]を参照して下さい)。

ReadDataは変数の名前です。
uint8_tは変数の[11]です。赤外線反射センサ値などのFREEDOMライブラリで扱う値が、符号の無い8ビット(1バイト)単位であることを意味しています。unsigned charと同義です。

Page Top

FDIII-HCの初期化 anchor.png[12]

gcc_edit_5.png

FDIII-HCを使用するためにはメイン関数の初めに初期化をしなければなりません。

Page Top

fd_SetBeepCondition[13] anchor.png[14]

警告音として、ビープ音を鳴らすための条件を設定します。但し、ビープ音を鳴らす必要がなければ本関数は省略しても問題ありません。

パラメータビープ音発生条件
FD_BEEP_BOOTUP起動直後
FD_BEEP_LOWVOLTAGE低電圧検出時
FD_BEEP_PACKETERRパケットエラーないしアラーム発生時
FD_BEEP_MMIディップスイッチ/プッシュボタン操作時
Page Top

fd_SetUVThreshold[15] anchor.png[16]

FDIII-HCの電源電圧低下を検出する閾値を設定します。fd_SetBeepCondition関数でFD_BEEP_LOWVOLTAGEを指定してされている場合、ビープ音が鳴ります。

Page Top

DX_ChangeBaudrate[17] anchor.png[18]

Dynamixel製品との通信速度(ボーレート)を変更します。ライブラリ内で静的に1M(1000000)で初期化されていますが、Dynamixel製品の通信速度が変更されている場合はプログラム側で同じ通信速度に変更する必要があります。
Dynamixel製品が125k[bps]の場合、プログラムで125k[bps]の設定を行う例

#include <fd.h>
void main (void) {
  DX_ChangeBaudrate (125000);
}
Page Top

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

gcc_edit_6.png

初期化まで終わりましたので、処理の流れを描いた図の通り、赤外線反射センサの値を取得します。

Page Top

DX_ReadByteData[20] anchor.png[21]

Dynamixel製品より1バイトのデータを直接取得する関数です。

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

第2引数は、AX-S1コントロールテーブル[23]のメモリマップアドレスです。AX-S1の正面の赤外線反射センサ値のメモリマップアドレスは27です。

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

第4引数は、タイムアウト時間(ms)です。ここではタイムアウト時間を10msに設定しています。タイムアウトが頻発して正しくデータが取得できない場合はタイムアウト時間を延長して下さい。

第5引数には本来、エラーの戻り値を入れるための変数のアドレスを指定しますが、今回はエラーの内容を見ないため、NULLを指定しています。

Page Top

センサ値の表示 anchor.png[25]

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

gcc_edit_7.png
Page Top

fd_printf[26] anchor.png[27]

パソコンに文字列を表示するための関数です。
第1引数は、出力する書式です。%3dは3桁の数字を出力します。\nは改行を表します。
第2引数は、書式で指定した型(%3d)で出力する変数を指定します。
書式内に複数の型指定がある場合は、引数を追加します。
例)書式内に文字列と数字を指定(第3引数まで使用)

#include <fd.h>
void main (void) {
  char *msg = "OK";
  int i = 10;
  fd_printf ("%s %d\n", msg, i);
}
Page Top

繰り返し anchor.png[28]

gcc_edit_8.png

このままでは一回センサの値を取得して表示するとプログラムが終わってしまいます。センサ値取得と表示の部分をwhile[29]で囲って繰り返し実行するようにします。
whileで囲ったらその間の行はTabキーで字下げしましょう。
whileは()内の条件が成立(true)していれば{}内を繰り返す関数です。ここでは{}内を無限に繰り返すという意味になります。

Page Top

fd_Wait[30] anchor.png[31]

指定時間(ms)の間、処理を停止します。
第1引数は、処理の停止時間(ms)です。ms(ミリ秒)とは1000分の1秒のことで、1秒=1000ミリ秒となります。ここでは10ms停止しますので、0.01秒の停止となります。

whileを使用する際は必ずfd_Waitを使用します。fd_Waitを使用しない場合、システム側の監視機能が働いてプログラムが強制終了する可能性があります。

Page Top

プログラムを実行する anchor.png[32]

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

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

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

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

Warning_p13.png
simple_term_exec.png

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

次のチャプター[38]

FDIII-HC Starter Kit Guide[39]へ戻る


Last-modified: 2011-07-12 (火) 12:17:34 (JST) (4662d) by yoshida