11: 2010-01-18 (月) 16:00:47 sho[6] [7] | 現: 2011-02-02 (水) 19:29:27 eid7gud[8] [9] | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | 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を使うに当たって必要だと思われるプログラムが予め用意され、ユーザーはその関数名を書くだけで簡単にプログラミングが可能になります | + | FREEDOMライブラリとは、FDIII-HCのための[[関数>FDIII-HC Starter Kit Guide Chapter1.4#e7352b10]]を集めたものです。FDIII-HCを使うに当たって必要だと思われるプログラムが予め用意され、ユーザーはその関数名を書くだけで簡単にプログラミングが可能になります。 |
- | (関数について詳しくは[[Chapter1.4の関数>FDIII-HC Starter Kit Guide Chapter1.4#e7352b10]]をご覧下さい)。 | + | |
**処理の流れを図にする [#o0aebfe7] | **処理の流れを図にする [#o0aebfe7] | ||
プログラミングを始める前に処理の流れを図にしましょう。 | プログラミングを始める前に処理の流れを図にしましょう。 | ||
#ref(Warning_p1.png,100%) | #ref(Warning_p1.png,100%) | ||
- | スタートから始まり、先ず赤外線距離センサの値を見ます。赤外線距離センサの値をある値(泥棒が来たと判断される値)と比較し、それ以上ならブザーをならし、それ以下ならブザーは鳴りません。その後、再び赤外線距離センサの値取得に戻ります。 | + | スタートから始まり、先ず赤外線反射センサの値を見ます。赤外線反射センサの値をある値(泥棒が来たと判断される値)と比較し、それ以上ならブザーをならし、それ以下ならブザーは鳴りません。その後、再び赤外線反射センサの値取得に戻ります。 |
今後この図を元にプログラミングを行います。悩んだら見返しましょう。 | 今後この図を元にプログラミングを行います。悩んだら見返しましょう。 | ||
**準備 [#v67b2c81] | **準備 [#v67b2c81] | ||
- | ソフトウェアのインストールは終わっていますか?まだの方は[[Chapter1.2のソフトウェアの準備>FDIII-HC Starter Kit Guide 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を起動します。 | ||
Line 38: | Line 38: | ||
メイン関数はその名の通り主となる関数です。プログラムはメイン関数内の上から順に実行して行きます。見やすくするために一行開けて | メイン関数はその名の通り主となる関数です。プログラムはメイン関数内の上から順に実行して行きます。見やすくするために一行開けて | ||
void main (void) { | void main (void) { | ||
+ | |||
} | } | ||
と入力して下さい。 | と入力して下さい。 | ||
- | void main (void)の後ろの { から } の間にメイン関数の中身を書いて行きます。 | + | void main (void)の後ろの{から}の間にメイン関数の中身を書いて行きます。 |
**変数宣言 [#k1355d19] | **変数宣言 [#k1355d19] | ||
#ref(Warning_p5.png,100%) | #ref(Warning_p5.png,100%) | ||
- | これから赤外線距離センサの値を読み込むプログラムを書くのですが、読み込んだ値を保存しておく所が必要になります。保存する場所として変数を使います(変数については[[Chapter1.4の変数>FDIII-HC Starter Kit Guide Chapter1.4#ib843ca5]]を参照して下さい)。~ | + | これから赤外線反射センサの値を読み込むプログラムを書くのですが、読み込んだ値を保存しておく場所が必要になります。保存する場所として[[変数>FDIII-HC Starter Kit Guide Chapter1.4#ib843ca5]]を使います。~ |
メイン関数のvoid main (void)の次にある空の行にカーソルを移動します。メイン関数内であることがわかりやすいようにTabキーを使ってインデントでスペースを空けてから | メイン関数のvoid main (void)の次にある空の行にカーソルを移動します。メイン関数内であることがわかりやすいようにTabキーを使ってインデントでスペースを空けてから | ||
Line 52: | Line 52: | ||
ReadDataは変数の名前です。~ | ReadDataは変数の名前です。~ | ||
- | uint8_tは変数の型です(型については[[Chapter1.4のデータ型>FDIII-HC Starter Kit Guide Chapter1.4#n1ebdc94]]を参照して下さい)。 | + | uint8_tは変数の[[型>FDIII-HC Starter Kit Guide Chapter1.4#n1ebdc94]]ですです。 |
- | これはC言語において通常使う型ではありません。赤外線距離センサ値などのFREEDOMライブラリで扱う値が、符号の無い8ビット(1バイト)単位であることを意味してFREEDOMライブラリではこのように書きます。通常のC言語で書くとunsigned charです。 | + | これはC言語において通常使う型ではありません。赤外線反射センサ値などのFREEDOMライブラリで扱う値が、符号の無い8ビット(1バイト)単位であることを意味してFREEDOMライブラリではこのように書きます。通常のC言語で書くとunsigned charです。 |
**FREEDOMライブラリの初期化 [#b75be71e] | **FREEDOMライブラリの初期化 [#b75be71e] | ||
Line 61: | Line 61: | ||
fd_Init (0, BT_CONSOLE, 0, 7.4); | fd_Init (0, BT_CONSOLE, 0, 7.4); | ||
と入力して下さい。~ | と入力して下さい。~ | ||
- | これはFREEDOMライブラリの初期化を行うための関数です(関数については[[Chapter1.4の関数>FDIII-HC Starter Kit Guide Chapter1.4#e7352b10]]をご覧下さい)。~ | + | これは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-HCのブザーの設定です(AX-S1のブザーではありません)。今は使用しないので0と書きます(ブザーの設定方法は[[Chapter2.5のFDIII-HCのブザーを鳴らす>FDIII-HC Starter Kit Guide Chapter2.5#vb6f386d]]を参照して下さい)。~ | + | ''第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ビット)のデータを読み出すための関数です(ビット、バイトについては[[Chapter1.4のビット・バイト>FDIII-HC Starter Kit Guide Chapter1.4#y24bb3d4]]を参照して下さい)。 | + | これは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については[[Chapter1.1のID>FDIII-HC Starter Kit Guide Chapter1.1#eaba0d72]]を参照して下さい)。AX-S1のIDは100です。~ | + | ''第1引数''は、Dynamixelの[[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です。 | + | ''第2引数''は、[[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のコントロールテーブルのアドレスとは関係ありません。 | + | ''第3引数''は、読み出したデータを入れるための変数の[[アドレス>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については[[Chapter1.4のfd_printf文>FDIII-HC Starter Kit Guide Chapter1.4#ua9b7908]]を参照して下さい)。~ | + | [[fd_printf>FDIII-HC Starter Kit Guide Chapter1.4#ua9b7908]]はパソコンに文字列を表示するための関数です。~ |
%3dの部分にReadDataの値が3桁で表示されます。 | %3dの部分にReadDataの値が3桁で表示されます。 | ||
** 繰り返し[#te218ffe] | ** 繰り返し[#te218ffe] | ||
#ref(Warning_p11.png,100%) | #ref(Warning_p11.png,100%) | ||
- | このままでは一回センサの値を取得して表示するとプログラムが終わってしまいます。センサ値取得と表示の部分をwhileで囲って繰り返し実行するようにします(while文については[[Chapter1.4のwhile文>FDIII-HC Starter Kit Guide Chapter1.4#of5e8829]]を参照して下さい)。 | + | このままでは一回センサの値を取得して表示するとプログラムが終わってしまいます。センサ値取得と表示の部分を[[while>FDIII-HC Starter Kit Guide Chapter1.4#of5e8829]]で囲って繰り返し実行するようにします。 |
while (1) { | while (1) { | ||
fd_DXReadByteData (100, 27, &ReadData); | fd_DXReadByteData (100, 27, &ReadData); | ||
Line 119: | Line 119: | ||
#ref(Warning_p14.png,100%) | #ref(Warning_p14.png,100%) | ||
-メニューの「コンパイル」→「ビルド」をクリックします。適当なファイル名(AlarmUnitなど)を入力し、適当なフォルダを選択して保存をクリックします。 | -メニューの「コンパイル」→「ビルド」をクリックします。適当なファイル名(AlarmUnitなど)を入力し、適当なフォルダを選択して保存をクリックします。 | ||
- | -コンパイルが成功したらOKをクリックします。自動的にSIMPLE TERMが起動します。 | + | -コンパイルが成功したらOKをクリックします。自動的にSIMPLE TERMが起動します。コンパイルに失敗した場合は[[コンパイル失敗>#vb68d315]]をご覧下さい。 |
-SIMPLE TERMのメニューの「ファイル」→「プロパティ」をクリックし適切な設定を行います。~ | -SIMPLE TERMのメニューの「ファイル」→「プロパティ」をクリックし適切な設定を行います。~ | ||
- | 詳しくは[[こちら>FDIII-HC Starter Kit Guide Chapter1.3#a3b0dd1e]]。 | + | 詳しくは[[こちら>FDIII-HC Starter Kit Guide Chapter1.3#a3b0dd1e]]をご覧下さい。 |
既に設定を行っている場合は必要ありません。 | 既に設定を行っている場合は必要ありません。 | ||
-SIMPLE TERMのメニューの「通信」→「ポートオープン」をクリックします。 | -SIMPLE TERMのメニューの「通信」→「ポートオープン」をクリックします。 | ||
Line 136: | Line 136: | ||
値はセンサの前に何もないと0、手を近づけて行くとだんだん増え、255まで増えるとそれ以上は増えなくなります。つまり値の範囲は0~255です。 | 値はセンサの前に何もないと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 Chapter2.4]]~ | ||
[[FDIII-HC Starter Kit Guide]]へ戻る | [[FDIII-HC Starter Kit Guide]]へ戻る |
(This host) = http://www.besttechnology.co.jp