3: 2009-11-17 (火) 16:17:08 sho ソース 現: 2011-02-02 (水) 19:29:27 eid7gud ソース
Line 1: Line 1:
-[[FDIII-HC Starter Kit Guid]]へ戻る +TITLE:FDIII-HC Starter Kit Guide Chapter2.3 
-*プログラミング [#kb82317e]+*プログラミング① [#kb82317e]
#ref(Warning_1.png,100%) #ref(Warning_1.png,100%)
-「AX-S1の距離センサに泥棒が反応したら、AX-S1のブザーを鳴らして脅かす」というプログラムを作成します。~+「AX-S1の赤外線反射センサに泥棒が反応したら、AX-S1のブザーを鳴らして脅かす」というプログラムを作成します。
-プログラムと言うと難しそうだと思う方もいるかもしれません。しかし本キットは予め用意されたFREEDOMライブラリを使うことでこのプログラムを16行で書くことができます。~ +プログラムと言うと難しそうだと感じる方もいるかもしれません。しかし本キットは予め用意されたFREEDOMライブラリを使うことで、このプログラムを16行で書くことができます。
-FREEDOMライブラリとは、FDIII-HCのための関数を集めたものです。FDIII-HCを使うに当たって必要だと思われるプログラムが予め用意され、ユーザーはその関数名を書くだけで簡単にプログラミングが可能になります。+
-**フローチャートを書く [#o0aebfe7] +FREEDOMライブラリとは、FDIII-HCのための[[関数>FDIII-HC Starter Kit Guide Chapter1.4#e7352b10]]を集めたものです。FDIII-HCを使うに当たって必要だと思われるプログラムが予め用意され、ユーザーはその関数名を書くだけで簡単にプログラミングが可能になります。 
-プログラミングを始める前にフローチャートを書きましょう。フローチャートとは作業の流れを図にしたものです。フローチャートには正しい書き方がありますが、今は気にせず自分が分かるように書いて下さい。+ 
 +**処理の流れを図にする [#o0aebfe7] 
 +プログラミングを始める前に処理の流れを図にしましょう。
#ref(Warning_p1.png,100%) #ref(Warning_p1.png,100%)
-上図はフローチャートの例です。スタートから始まり先ず距離センサの値を見ます。距離センサの値が泥棒が来たと判断される値と比較し、それ以上ならブザーをならし、それ以下なら何もしません。その後再び距離センサの値取得に戻ります。~+スタートから始まり、先ず赤外線反射センサの値を見ます。赤外線反射センサの値をある値(泥棒が来たと判断される値)と比較し、それ以上ならブザーをならし、それ以下ならブザーは鳴りません。その後、再び赤外線反射センサの値取得に戻ります。
-今後このフローチャートを元にプログラミングを行います。悩んだらこの図を見返しましょう。+今後この図を元にプログラミングを行います。悩んだら見返しましょう。
**準備 [#v67b2c81] **準備 [#v67b2c81]
-ソフトウェアのインストールは終わっていますか?まだの方は[[ソフトウェアの準備>FDIII-HC Starter Kit Guid Chapter1.2]]の章を見て下さい。~+ソフトウェアのインストールは終わっていますか?まだの方は[[Chapter1.2のソフトウェアの準備>FDIII-HC Starter Kit Guide Chapter1.2]]を見て下さい。~
#ref(write1.png,100%) #ref(write1.png,100%)
デスクトップのGCC Developer LiteのショートカットをダブルクリックしてGCC Developer Liteを起動します。 デスクトップのGCC Developer LiteのショートカットをダブルクリックしてGCC Developer Liteを起動します。
 +#ref(write1_2.png,100%)
 +GCC Developer Liteの青いエリアにプログラムを書いて行きます。プログラムは半角英数で入力します。大文字と小文字を区別して下さい。~
 +最初から[EOF]と書いてありますが、これはファイルの終わりを示すものですので気にせず入力して下さい。
**FREEDOMライブラリを使えるようにする [#ke15e8c6] **FREEDOMライブラリを使えるようにする [#ke15e8c6]
Line 26: Line 30:
---- ----
#ref(Warning_p3.png,100%) #ref(Warning_p3.png,100%)
-fd.hというファイルの中に関数が定義されています。+fd.hという名前のファイルの中に色々な関数が書かれています。
-#include <fd.h>と入力した行の上でCtrlボタンを押しながらダブルクリックするとfd.hを開くことができますので見てみましょう。+#include <fd.h>と入力した行の上でCtrlボタンを押しながらダブルクリックするとfd.hを開くことができます。~ 
 +まだfd.hの中身を理解する必要はありません。fd.hのウィンドウ右上の×ボタン(GCC Developer Liteウィンドウの×ボタンではありません)で閉じます。
**メイン関数 [#c9fdea2a] **メイン関数 [#c9fdea2a]
#ref(Warning_p4.png,100%) #ref(Warning_p4.png,100%)
-メイン関数はその名の通り主となる関数です。プログラムはメイン関数内の最初から実行して行きます。見やすくするために一行開けて+メイン関数はその名の通り主となる関数です。プログラムはメイン関数内の上から順に実行して行きます。見やすくするために一行開けて
 void main (void) {  void main (void) {
 + 
 }  }
と入力して下さい。 と入力して下さい。
-void main (void)の後ろの { から } の間にメイン関数の中身を書いて行きます。+void main (void)の後ろの{から}の間にメイン関数の中身を書いて行きます。
**変数宣言 [#k1355d19] **変数宣言 [#k1355d19]
#ref(Warning_p5.png,100%) #ref(Warning_p5.png,100%)
-これから距離センサの値を読み込むプログラムを書くのですが、読み込んだ値を保存しておく所が必要になります。保存する場所として変数を使います。メイン関数の中の一行目に+これから赤外線反射センサの値を読み込むプログラムを書くのですが、読み込んだ値を保存しておく場所が必要になります。保存する場所として[[変数>FDIII-HC Starter Kit Guide Chapter1.4#ib843ca5]]を使います。~ 
 + 
 +メイン関数のvoid main (void)の次にある空の行にカーソルを移動します。メイン関数内であることがわかりやすいようにTabキーを使ってインデントでスペースを空けてから
 uint8_t ReadData;  uint8_t ReadData;
-と入力して下さい。関数の中ではTabキーを使ってインデントを付けます(詳しくはこちらを参照して下さい。~+と入力して下さい(プログラムの書き方については[[Chapter1.4のプログラムの書き方>FDIII-HC Starter Kit Guide Chapter1.4#y8e712e1]]を参照して下さい)。
ReadDataは変数の名前です。~ ReadDataは変数の名前です。~
-uint8_tは変数の型です(型について詳しくはこちらを参照して下さい)。 +uint8_tは変数の[[型>FDIII-HC Starter Kit Guide Chapter1.4#n1ebdc94]]ですです。 
-これはC言語において通常使う型ではありません。距離センサ値などのFREEDOMライブラリで扱う値が、符号の無い8ビット単位であることを意味してFREEDOMライブラリではこのように書きます。通常のC言語で書くとunsigned charです。+これはC言語において通常使う型ではありません。赤外線反射センサ値などのFREEDOMライブラリで扱う値が、符号の無い8ビット(1バイト)単位であることを意味してFREEDOMライブラリではこのように書きます。通常のC言語で書くとunsigned charです。
-**FREEDOMライブラリ初期化 [#b75be71e]+**FREEDOMライブラリの初期化 [#b75be71e]
#ref(Warning_p6.png,100%) #ref(Warning_p6.png,100%)
FREEDOMライブラリを使用するためには必ずメイン関数の初めに初期化をしなければなりません。 FREEDOMライブラリを使用するためには必ずメイン関数の初めに初期化をしなければなりません。
Line 54: Line 61:
 fd_Init (0, BT_CONSOLE, 0, 7.4);  fd_Init (0, BT_CONSOLE, 0, 7.4);
と入力して下さい。~ と入力して下さい。~
-これはFREEDOMライブラリの初期化を行うための関数です(関数について詳しくはこちらをご覧下さい)。~+これはFREEDOMライブラリの初期化を行うための[[関数>FDIII-HC Starter Kit Guide Chapter1.4#e7352b10]]です。~
#ref(Warning_p7.png,100%) #ref(Warning_p7.png,100%)
fd_Initは関数名です。~ fd_Initは関数名です。~
-''第1引数''はPCとの通信速度です。通常USBやBluetoothを使う場合は関係ありませんので0と書きます。~+''第1引数''は、PCとの通信速度です。通常USBやBluetoothを使う場合は関係ありませんので0と書きます。~
-''第2引数''はBluetoothの通信方法です。BT_DISABLE(Bluetoothを使用しない)、BT_CONSOLE(パソコンと通信)、BT_RC100(別売りリモートコントローラRC-100と通信)から選択します。BT_CONSOLEに設定してもUSB通信を利用できますのでとりあえずBT_CONSOLEと書きます~+''第2引数''は、Bluetoothの通信方法です。BT_DISABLE(Bluetoothを使用しない)、BT_CONSOLE(パソコンと通信)、BT_RC100(別売りリモートコントローラRC-100と通信)から選択します。BT_CONSOLEに設定してもUSB通信を利用できますのでとりあえずBT_CONSOLEと書きます。~
-''第3引数''はFDIII-HDのブザーの設定です(AX-S1のブザーではありません)。今は使用しないので0と書きます。~+''第3引数''は、FDIII-HCの[[ブザーを鳴らす>FDIII-HC Starter Kit Guide Chapter2.5#vb6f386d]]です(AX-S1のブザーではありません)。今は使用しないので0と書きます。~
-''第4引数''はブザーがなる供給電圧の閾値です。バッテリを使用する場合に、残量が少ない事を知らせます。ここでは7.4と書いて供給電圧が7.4Vを切るとブザーがなるように設定しましょう。+''第4引数''はブザーがなる供給電圧の閾値です。バッテリを使用する場合に、残量が少ない事を知らせます。ここでは7.4と書いて供給電圧が7.4Vを切るとブザーがなるように設定します。但し、第3引数のブザーの設定をしていないので今はブザーは鳴りません。
-**距離センサ値の取得 [#se3a7020]+**赤外線反射センサ値の取得 [#se3a7020]
#ref(Warning_p8.png,100%) #ref(Warning_p8.png,100%)
-初期化まで終わると準備は整いました。フローチャートの通り初めに距離センサの値を取得します。初期化の後、一行開けて+初期化まで終われば準備は整いました。処理の流れを描いた図の通り、初めに赤外線反射センサの値を取得します。初期化の後、一行開けて
 fd_DXReadByteData (100, 27, &ReadData);  fd_DXReadByteData (100, 27, &ReadData);
と入力して下さい。 と入力して下さい。
-これはAX-S1やAX-12+から1バイト(8ビット)のデータを読み出すための関数です。+これはAX-S1やAX-12+から1[[バイト>FDIII-HC Starter Kit Guide Chapter1.4#y24bb3d4]](8[[ビット>FDIII-HC Starter Kit Guide Chapter1.4#y24bb3d4]])のデータを読み出すための関数です。
#ref(Warning_p9.png,100%) #ref(Warning_p9.png,100%)
fd_DXReadByteDataは関数名です。~ fd_DXReadByteDataは関数名です。~
-''第1引数''は、DynamixelのIDです(IDについて詳しくはこちらを参照して下さい)。AX-S1のIDは100です。~+''第1引数''は、Dynamixelの[[ID>FDIII-HC Starter Kit Guide Chapter1.1#eaba0d72]]です。AX-S1のIDは100です。~
-''第2引数''は、AX-S1のコントロールテーブルのアドレスです。AX-S1コントロールマップを見て下さい。AX-S1の前方の距離センサ値のアドレスは27です。+''第2引数''は、[[AX-S1コントロールテーブル>FDIII-HC Starter Kit Guide Chapter1.1#u70f1fa1]]のアドレスです。AX-S1の前方の赤外線反射センサ値のアドレスは27です。
-''第3引数''は、読み出したデータを入れるための変数のアドレスです(アドレスについて詳しくはこちらを参照して下さい)。変数の頭に&をつけるとその変数のアドレスという意味になります。+''第3引数''は、読み出したデータを入れるための変数の[[アドレス&gt;FDIII-HC Starter Kit Guide Chapter1.4#b45fcfd3]]です。変数の頭に&をつけるとその変数のアドレスという意味になります。AX-S1のコントロールテーブルのアドレスとは関係ありません。
**センサ値の表示 [#lf648b8e] **センサ値の表示 [#lf648b8e]
-次にフローチャートでは取得したセンサの値とある閾値を比較するとなっていますが、そもそもセンサの値がどのような数値なのか分からない事には、閾値を決める事ができません。よって取得したセンサの値を表示します。+次に[[処理の流れ>FDIII-HC Starter Kit Guide Chapter2.3#o0aebfe7]]を描いた図では取得したセンサの値とある閾値を比較するとなっていますが、そもそもセンサの値がどのような数値なのか分からないことには、閾値を決める事ができません。よって先ず取得したセンサの値を表示します。
#ref(Warning_p10.png,100%) #ref(Warning_p10.png,100%)
-距離センサを取得した関数の後に+赤外線反射センサを取得した関数の後に
 fd_printf("%3d\r", ReadData);  fd_printf("%3d\r", ReadData);
と入力して下さい。 と入力して下さい。
-fd_printfはパソコンに文字列を表示するための関数です(fd_printfの書き方の詳細はこちらを参照して下さい)。+[[fd_printf>FDIII-HC Starter Kit Guide Chapter1.4#ua9b7908]]はパソコンに文字列を表示するための関数です。
-%3dの部分にReadDataの値が3桁で表示されます。\rは行を進めずに改行です。+%3dの部分にReadDataの値が3桁で表示されます。
-*** 繰り返し[#te218ffe] +** 繰り返し[#te218ffe] 
-#ref(Warning_p10.png,100%) +#ref(Warning_p11.png,100%) 
-このままでは一回センサの値を取得、表示するとプログラムが終わってしまいます。センサ値取得と表示の部分をwhileで囲って繰り返し実行するようにします(while関数の詳細はこちらを参照して下さい)。+このままでは一回センサの値を取得して表示するとプログラムが終わってしまいます。センサ値取得と表示の部分を[[while>FDIII-HC Starter Kit Guide Chapter1.4#of5e8829]]で囲って繰り返し実行するようにします。
 while (1) {  while (1) {
  fd_DXReadByteData (100, 27, &ReadData);   fd_DXReadByteData (100, 27, &ReadData);
  fd_printf("%3d\r", 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が起動します。コンパイルに失敗した場合は[[コンパイル失敗>#vb68d315]]をご覧下さい。
 +-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です。
 +
 +**コンパイル失敗 [#vb68d315]
 +#ref(Warning_p15.png,100%)
 +プログラムの書式に間違いがあると、コンパイルを行ったときにコンパイラログ(プログラムを入力する青いエリアの下)の最後に赤くコンパイル<失敗>と表示されます。~
 +;や{が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をクリックします。~
 +#ref(Warning_p14.png,100%)
 +
 +[[次のチャプターへ>FDIII-HC Starter Kit Guide Chapter2.4]]~
 +
 +[[FDIII-HC Starter Kit Guide]]へ戻る


トップ   差分 リロード印刷に適した表示   全ページ一覧 単語検索 最新ページの一覧   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom