4: 2009-11-17 (火) 18:18:02 sho | 5: 2009-11-19 (木) 19:25:12 sho | ||
---|---|---|---|
Line 1: | Line 1: | ||
*プログラミング① [#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を使うに当たって必要だと思われるプログラムが予め用意され、ユーザーはその関数名を書くだけで簡単にプログラミングが可能になります。 | ||
- | **フローチャートを書く [#o0aebfe7] | + | **処理の流れを図にする [#o0aebfe7] |
- | プログラミングを始める前にフローチャートを書きましょう。フローチャートとは作業の流れを図にしたものです。フローチャートには正しい書き方がありますが、今は気にせず自分が分かるように書いて下さい。 | + | プログラミングを始める前に処理の流れを図にしましょう。 |
#ref(Warning_p1.png,100%) | #ref(Warning_p1.png,100%) | ||
- | 上図はフローチャートの例です。スタートから始まり先ず距離センサの値を見ます。距離センサの値が泥棒が来たと判断される値と比較し、それ以上ならブザーをならし、それ以下なら何もしません。その後再び距離センサの値取得に戻ります。~ | + | スタートから始まり先ず距離センサの値を見ます。距離センサの値をある値(泥棒が来たと判断される値)と比較し、それ以上ならブザーをならし、それ以下なら何もしません。その後再び距離センサの値取得に戻ります。~ |
- | 今後このフローチャートを元にプログラミングを行います。悩んだらこの図を見返しましょう。 | + | 今後この図を元にプログラミングを行います。悩んだら見返しましょう。 |
**準備 [#v67b2c81] | **準備 [#v67b2c81] | ||
Line 25: | Line 25: | ||
---- | ---- | ||
#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を開くことができますので見てみましょう。 | ||
Line 39: | Line 39: | ||
**変数宣言 [#k1355d19] | **変数宣言 [#k1355d19] | ||
#ref(Warning_p5.png,100%) | #ref(Warning_p5.png,100%) | ||
- | これから距離センサの値を読み込むプログラムを書くのですが、読み込んだ値を保存しておく所が必要になります。保存する場所として変数を使います。メイン関数の中の一行目に | + | これから距離センサの値を読み込むプログラムを書くのですが、読み込んだ値を保存しておく所が必要になります。保存する場所として変数を使います(変数について詳しくは[[こちら>FDIII-HC Starter Kit Guid Chapter1.4#ib843ca5]]を参照して下さい)。メイン関数の中の一行目に |
uint8_t ReadData; | uint8_t ReadData; | ||
- | と入力して下さい。関数の中ではTabキーを使ってインデントを付けます(詳しくはこちらを参照して下さい。~ | + | と入力して下さい。関数の中ではTabキーを使ってインデントを付けます(詳しくはこちらを参照して下さい)。~ |
ReadDataは変数の名前です。~ | ReadDataは変数の名前です。~ | ||
- | uint8_tは変数の型です(型について詳しくはこちらを参照して下さい)。 | + | uint8_tは変数の型です(型について詳しくは[[こちら>FDIII-HC Starter Kit Guid Chapter1.4#n1ebdc94]]を参照して下さい)。 |
- | これはC言語において通常使う型ではありません。距離センサ値などのFREEDOMライブラリで扱う値が、符号の無い8ビット単位であることを意味してFREEDOMライブラリではこのように書きます。通常のC言語で書くとunsigned charです。 | + | これはC言語において通常使う型ではありません。距離センサ値などのFREEDOMライブラリで扱う値が、符号の無い8ビット(1バイト)単位であることを意味してFREEDOMライブラリではこのように書きます。通常のC言語で書くとunsigned charです。 |
**FREEDOMライブラリ初期化 [#b75be71e] | **FREEDOMライブラリ初期化 [#b75be71e] | ||
Line 61: | Line 61: | ||
''第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のブザーの設定です(AX-S1のブザーではありません)。今は使用しないので0と書きます(ブザーの設定方法は[[こちら>FDIII-HC Starter Kit Guid Chapter2.5#vb6f386d]]を参照して下さい)。~ |
- | ''第4引数''はブザーがなる供給電圧の閾値です。バッテリを使用する場合に、残量が少ない事を知らせます。ここでは7.4と書いて供給電圧が7.4Vを切るとブザーがなるように設定しましょう。 | + | ''第4引数''はブザーがなる供給電圧の閾値です。バッテリを使用する場合に、残量が少ない事を知らせます。ここでは7.4と書いて供給電圧が7.4Vを切るとブザーがなるように設定します。 |
**距離センサ値の取得 [#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バイト(8ビット)のデータを読み出すための関数です(ビット、バイトについては[[こちら>FDIII-HC Starter Kit Guid 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です(IDについて詳しくは[[こちら>FDIII-HC Starter Kit Guid Chapter1.1#eaba0d72]]を参照して下さい)。AX-S1のIDは100です。~ |
- | ''第2引数''は、AX-S1のコントロールテーブルのアドレスです。AX-S1コントロールマップを見て下さい。AX-S1の前方の距離センサ値のアドレスは27です。 | + | ''第2引数''は、AX-S1のコントロールテーブルのアドレスです。[[AX-S1コントロールテーブル>FDIII-HC Starter Kit Guid Chapter1.1#u70f1fa1]]を見て下さい。AX-S1の前方の距離センサ値のアドレスは27です。 |
- | ''第3引数''は、読み出したデータを入れるための変数のアドレスです(アドレスについて詳しくはこちらを参照して下さい)。変数の頭に&をつけるとその変数のアドレスという意味になります。 | + | ''第3引数''は、読み出したデータを入れるための変数のアドレスです(アドレスについて詳しくはこちらを参照して下さい)。変数の頭に&をつけるとその変数のアドレスという意味になります。AX-S1のコントロールテーブルのアドレスとは関係ありません。 |
**センサ値の表示 [#lf648b8e] | **センサ値の表示 [#lf648b8e] | ||
- | 次にフローチャートでは取得したセンサの値とある閾値を比較するとなっていますが、そもそもセンサの値がどのような数値なのか分からない事には、閾値を決める事ができません。よって取得したセンサの値を表示します。 | + | 次に処理の流れを描いた図では取得したセンサの値とある閾値を比較するとなっていますが、そもそもセンサの値がどのような数値なのか分からないことには、閾値を決める事ができません。よって先ず取得したセンサの値を表示します。 |
#ref(Warning_p10.png,100%) | #ref(Warning_p10.png,100%) | ||
Line 87: | Line 87: | ||
fd_printf("%3d\r", ReadData); | fd_printf("%3d\r", ReadData); | ||
と入力して下さい。 | と入力して下さい。 | ||
- | fd_printfはパソコンに文字列を表示するための関数です(fd_printfの書き方の詳細はこちらを参照して下さい)。~ | + | fd_printfはパソコンに文字列を表示するための関数です(fd_printfについて詳細は[[こちら>FDIII-HC Starter Kit Guid Chapter1.4#ua9b7908]]を参照して下さい)。~ |
- | %3dの部分にReadDataの値が3桁で表示されます。\rは行を進めずに改行です。 | + | %3dの部分にReadDataの値が3桁で表示されます。\rは同じ行の頭から再び表示します。 |
** 繰り返し[#te218ffe] | ** 繰り返し[#te218ffe] | ||
#ref(Warning_p11.png,100%) | #ref(Warning_p11.png,100%) | ||
- | このままでは一回センサの値を取得、表示するとプログラムが終わってしまいます。センサ値取得と表示の部分をwhileで囲って繰り返し実行するようにします(while関数の詳細はこちらを参照して下さい)。 | + | このままでは一回センサの値を取得して表示するとプログラムが終わってしまいます。センサ値取得と表示の部分をwhileで囲って繰り返し実行するようにします(while文の詳細は[[こちら>FDIII-HC Starter Kit Guid 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で囲ったらその間の行はTabキーで字下げしましょう。 |
- | whileは()内の条件がtrueなら{}内を繰り返す関数です。またtrue=1ですのでここでは{}内を無限に繰り返すという事になります。 | + | whileは()内の条件がtrue(正)なら{}内を繰り返す関数です。true=1ですのでここでは{}内を無限に繰り返すという意味になります。 |
**センサ値をパソコンで表示する [#r068277f] | **センサ値をパソコンで表示する [#r068277f] | ||
- | ここまでで既に動くプログラムができ上がっています。FDIII-HCにプログラムを書き込んで実際に動かしてみましょう。~ | + | ここまで書くと既に動くプログラムができ上がっています。FDIII-HCにプログラムを書き込んで実際に動かしてみましょう。~ |
ここでは書き込み方法を簡単に説明します。詳細は[[Chapter1.3 動作確認>FDIII-HC Starter Kit Guid Chapter1.3]]を参照して下さい。~ | ここでは書き込み方法を簡単に説明します。詳細は[[Chapter1.3 動作確認>FDIII-HC Starter Kit Guid Chapter1.3]]を参照して下さい。~ | ||
Line 108: | Line 108: | ||
FDIII-HCの電源をOFFにし、プッシュボタンを押しながらUSBケーブルを差し込む事を忘れないで下さい。 | FDIII-HCの電源をOFFにし、プッシュボタンを押しながらUSBケーブルを差し込む事を忘れないで下さい。 | ||
-メニューの「ツール」->「コンパイルオプション」で「FREEDOM III library for FDIII-HC」を選択しOKをクリックします。~ | -メニューの「ツール」->「コンパイルオプション」で「FREEDOM III library for FDIII-HC」を選択しOKをクリックします。~ | ||
- | 既に一度サンプルプログラムを書き込んでおり、左下に「FREEDOM III library for FDIII-HC」と表示されている場合は必要ありません。 | + | 但し既に一度サンプルプログラムを書き込んでおり、左下に「FREEDOM III library for FDIII-HC」と表示されている場合は必要ありません。 |
#ref(Warning_p14.png,100%) | #ref(Warning_p14.png,100%) | ||
- | -メニューの「コンパイル」->「ビルド」をクリックします。適当なファイル名(AlarmUnit等)を入力し保存をクリックします。 | + | -メニューの「コンパイル」->「ビルド」をクリックします。適当なファイル名(AlarmUnitなど)を入力し保存をクリックします。 |
- | -コンパイルが成功したらOKをクリックし、SIMPLE TERMが起動します。 | + | -コンパイルが成功したらOKをクリックします。自動的にSIMPLE TERMが起動します。 |
-SIMPLE TERMのメニューの「ファイル」->「プロパティ」をクリックし適切な設定を行います。~ | -SIMPLE TERMのメニューの「ファイル」->「プロパティ」をクリックし適切な設定を行います。~ | ||
+ | 詳しくは[[こちら>FDIII-HC Starter Kit Guid Chapter1.3#a3b0dd1e]]。 | ||
既に設定を行っている場合は必要ありません。 | 既に設定を行っている場合は必要ありません。 | ||
-SIMPLE TERMのメニューの「通信」->「ポートオープン」をクリックします。 | -SIMPLE TERMのメニューの「通信」->「ポートオープン」をクリックします。 | ||
-SIMPLE TERM上に | -SIMPLE TERM上に | ||
--< FDIII Ver1.0 by BestTechnology >-- | --< FDIII Ver1.0 by BestTechnology >-- | ||
- | と表示される事を確認してから、走る人マークをクリックします。 | + | と表示されることを確認してから、走る人マークをクリックします。 |
-<SUCCESS>と表示されたらキーボードで「g」を入力しプログラムを実行します。 | -<SUCCESS>と表示されたらキーボードで「g」を入力しプログラムを実行します。 | ||
-FDIII-HCの電源スイッチをONにします。このとき電源が供給されるとAX-S1のブザーが「ピッ」と鳴ります。 | -FDIII-HCの電源スイッチをONにします。このとき電源が供給されるとAX-S1のブザーが「ピッ」と鳴ります。 | ||
---- | ---- | ||
- | SIMPLE TERM上に数字が表示されているはずです。AX-S1の正面のセンサに手をかざし、数値が変動する事を確認して下さい。 | + | SIMPLE TERM上に数字が表示されているはずです。AX-S1の正面のセンサに手をかざし、数値が変動することを確認して下さい。 |
#ref(Warning_p13.png,100%) | #ref(Warning_p13.png,100%) | ||
#ref(Warning_p12.png,100%) | #ref(Warning_p12.png,100%) | ||
- | 値はセンサの前に何もないと0、手を近づけて行くとだんだんと増え、255まで増えるとそれ以上は増えなくなります。つまり値の範囲は0~255です。 | + | 値はセンサの前に何もないと0、手を近づけて行くとだんだん増え、255まで増えるとそれ以上は増えなくなります。つまり値の範囲は0~255です。 |
[[次のチャプターへ>FDIII-HC Starter Kit Guid Chapter2.4]]~ | [[次のチャプターへ>FDIII-HC Starter Kit Guid Chapter2.4]]~ | ||
[[FDIII-HC Starter Kit Guid]]へ戻る | [[FDIII-HC Starter Kit Guid]]へ戻る |