ページへ戻る

− Links

 印刷 

FDIII-HC Starter Kit Guide Chapter2.3 のバックアップソース(No.11) :: Besttechnology

knowledge:FDIII-HC Starter Kit Guide Chapter2.3 のバックアップソース(No.11)

« Prev[4]  Next »[5]
*プログラミング① [#kb82317e]
#ref(Warning_1.png,100%)
「AX-S1の赤外線距離センサに泥棒が反応したら、AX-S1のブザーを鳴らして脅かす」というプログラムを作成します。

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

FREEDOMライブラリとは、FDIII-HCのための関数を集めたものです。FDIII-HCを使うに当たって必要だと思われるプログラムが予め用意され、ユーザーはその関数名を書くだけで簡単にプログラミングが可能になります
(関数について詳しくは[[Chapter1.4の関数>FDIII-HC Starter Kit Guide Chapter1.4#e7352b10]]をご覧下さい)。

**処理の流れを図にする [#o0aebfe7]
プログラミングを始める前に処理の流れを図にしましょう。
#ref(Warning_p1.png,100%)
スタートから始まり、先ず赤外線距離センサの値を見ます。赤外線距離センサの値をある値(泥棒が来たと判断される値)と比較し、それ以上ならブザーをならし、それ以下ならブザーは鳴りません。その後、再び赤外線距離センサの値取得に戻ります。

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

**準備 [#v67b2c81]
ソフトウェアのインストールは終わっていますか?まだの方は[[Chapter1.2のソフトウェアの準備>FDIII-HC Starter Kit Guide Chapter1.2]]の章を見て下さい。~
#ref(write1.png,100%)
デスクトップのGCC Developer LiteのショートカットをダブルクリックしてGCC Developer Liteを起動します。
#ref(write1_2.png,100%)
GCC Developer Liteの青いエリアにプログラムを書いて行きます。プログラムは半角英数で入力します。大文字と小文字を区別して下さい。~
最初から[EOF]と書いてありますが、これはファイルの終わりを示すものですので気にせず入力して下さい。

**FREEDOMライブラリを使えるようにする [#ke15e8c6]
#ref(Warning_p2.png,100%)
既に説明した通り、FREEDOMライブラリには便利な関数が用意されています。この関数を使用できるようにするために先ず最初に
 #include <fd.h>
と入力して下さい。
----
#ref(Warning_p3.png,100%)
fd.hという名前のファイルの中に色々な関数が書かれています。~
#include <fd.h>と入力した行の上でCtrlボタンを押しながらダブルクリックするとfd.hを開くことができます。~
まだfd.hの中身を理解する必要はありません。fd.hのウィンドウ右上の×ボタン(GCC Developer Liteウィンドウの×ボタンではありません)で閉じます。

**メイン関数 [#c9fdea2a]
#ref(Warning_p4.png,100%)
メイン関数はその名の通り主となる関数です。プログラムはメイン関数内の上から順に実行して行きます。見やすくするために一行開けて
 void main (void) {

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

**変数宣言 [#k1355d19]
#ref(Warning_p5.png,100%)
これから赤外線距離センサの値を読み込むプログラムを書くのですが、読み込んだ値を保存しておく所が必要になります。保存する場所として変数を使います(変数については[[Chapter1.4の変数>FDIII-HC Starter Kit Guide Chapter1.4#ib843ca5]]を参照して下さい)。~

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

ReadDataは変数の名前です。~
uint8_tは変数の型です(型については[[Chapter1.4のデータ型>FDIII-HC Starter Kit Guide Chapter1.4#n1ebdc94]]を参照して下さい)。
これはC言語において通常使う型ではありません。赤外線距離センサ値などのFREEDOMライブラリで扱う値が、符号の無い8ビット(1バイト)単位であることを意味してFREEDOMライブラリではこのように書きます。通常のC言語で書くとunsigned charです。

**FREEDOMライブラリの初期化 [#b75be71e]
#ref(Warning_p6.png,100%)
FREEDOMライブラリを使用するためには必ずメイン関数の初めに初期化をしなければなりません。
変数宣言の後、一行開けて
 fd_Init (0, BT_CONSOLE, 0, 7.4);
と入力して下さい。~
これはFREEDOMライブラリの初期化を行うための関数です(関数については[[Chapter1.4の関数>FDIII-HC Starter Kit Guide Chapter1.4#e7352b10]]をご覧下さい)。~
#ref(Warning_p7.png,100%)
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と書きます(ブザーの設定方法は[[Chapter2.5のFDIII-HCのブザーを鳴らす>FDIII-HC Starter Kit Guide Chapter2.5#vb6f386d]]を参照して下さい)。~

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

**赤外線距離センサ値の取得 [#se3a7020]
#ref(Warning_p8.png,100%)
初期化まで終われば準備は整いました。処理の流れを描いた図の通り、初めに赤外線距離センサの値を取得します。初期化の後、一行開けて
 fd_DXReadByteData (100, 27, &ReadData);
と入力して下さい。
これはAX-S1やAX-12+から1バイト(8ビット)のデータを読み出すための関数です(ビット、バイトについては[[Chapter1.4のビット・バイト>FDIII-HC Starter Kit Guide Chapter1.4#y24bb3d4]]を参照して下さい)。
#ref(Warning_p9.png,100%)
fd_DXReadByteDataは関数名です。~

''第1引数''は、DynamixelのIDです(IDについては[[Chapter1.1のID>FDIII-HC Starter Kit Guide Chapter1.1#eaba0d72]]を参照して下さい)。AX-S1のIDは100です。~

''第2引数''は、AX-S1のコントロールテーブルのアドレスです。[[Chapter1.1のAX-S1コントロールテーブル>FDIII-HC Starter Kit Guide Chapter1.1#u70f1fa1]]を見て下さい。AX-S1の前方の赤外線距離センサ値のアドレスは27です。

''第3引数''は、読み出したデータを入れるための変数のアドレスです(アドレスについては[[Chapter1.4のアドレス>FDIII-HC Starter Kit Guide Chapter1.4#b45fcfd3]]を参照して下さい)。変数の頭に & をつけるとその変数のアドレスという意味になります。AX-S1のコントロールテーブルのアドレスとは関係ありません。

**センサ値の表示 [#lf648b8e]
次に処理の流れを描いた図では取得したセンサの値とある閾値を比較するとなっていますが、そもそもセンサの値がどのような数値なのか分からないことには、閾値を決める事ができません。よって先ず取得したセンサの値を表示します。
#ref(Warning_p10.png,100%)

赤外線距離センサを取得した関数の後に
 fd_printf("%3d\r", ReadData);
と入力して下さい。
fd_printfはパソコンに文字列を表示するための関数です(fd_printfについては[[Chapter1.4のfd_printf文>FDIII-HC Starter Kit Guide Chapter1.4#ua9b7908]]を参照して下さい)。~
%3dの部分にReadDataの値が3桁で表示されます。

** 繰り返し[#te218ffe]
#ref(Warning_p11.png,100%)
このままでは一回センサの値を取得して表示するとプログラムが終わってしまいます。センサ値取得と表示の部分をwhileで囲って繰り返し実行するようにします(while文については[[Chapter1.4のwhile文>FDIII-HC Starter Kit Guide Chapter1.4#of5e8829]]を参照して下さい)。
 while (1) {
  fd_DXReadByteData (100, 27, &ReadData);
  fd_printf("%3d\r", ReadData);
 }
whileで囲ったらその間の行はTabキーで字下げしましょう。
whileは()内の条件がtrue(正)なら{}内を繰り返す関数です。true=1ですのでここでは{}内を無限に繰り返すという意味になります。

**センサ値をパソコンで表示する [#r068277f]
ここまで書くと既に動くプログラムができ上がっています。FDIII-HCにプログラムを書き込んで実際に動かしてみましょう。~

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

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

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

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

[[次のチャプターへ>FDIII-HC Starter Kit Guide Chapter2.4]]~

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

« Prev[4]  Next »[5]