FREEDOMライブラリを読み込むために最初に必ず
#include <fd.h>
を書きます。
実際の処理はmain関数の{}の中に書きます。
main関数内でFREEDOMライブラリを使用する前に必ず
で初期化します。
初期化についてはどのプログラムでも殆んど同じですので、新しいプログラムを作るときには必ず記述して下さい。
Dynamixelから1バイトのデータを取り出すには
DX_ReadByteData (ID, アドレス, &変数名, タイムアウト時間, NULL);
を使います。値を入れる変数名の前に&を付けるのを忘れないよう注意しましょう。変数名の前に&を付けると変数のアドレスを表します。
今回はエラーコードを使用しない為、NULLを指定していますが、エラーコードを使用する際はTDXAlarm型の変数のアドレスを指定します。
Dynamixelに1バイトのデータを書き込むには
DX_WriteByteData (ID, アドレス, 書き込む値, タイムアウト時間, NULL);
を使います。
取り込んだ値を表示したりするにはfd_printfを使います。
Chapter2.3, 2.4を参考に「音センサに反応があったらブザーを鳴らす」という方法でプログラムを書いてみましょう。
また、Chapter2.1で紹介した本キットの機能を使って、自分で考えた装置の制作にもチャレンジしてみましょう。
ヒント
プログラムを書き込むには一度ブートローダのコマンドモードに入らなければなりません。ブートローダのコマンドモードに入る方法として、これまでプッシュボタンを押しながらUSBケーブルを接続するという方法をとっていましたが、毎回USBケーブルを抜き差しするのは面倒です。
そこでUSBケーブルを抜き差ししないでブートローダのコマンドモードに入る方法を紹介します。
ブートローダのコマンドモードに入るのは簡単で、プログラムを終了するだけです。
#include <fd.h> void main (void) { uint8_t ReadData; fd_SetBeepCondition (FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP); fd_SetUVThreshold (7.4); DX_ChangeBaudrate (1000000); while (!fd_rx_buff () && !fd_GetPB ()) { DX_ReadByteData (100, 27, &ReadData, 10, NULL); fd_printf ("%3d\r", ReadData); if (ReadData > 100) { DX_WriteByteData (100, 40, 10, 10, NULL); DX_WriteByteData (100, 41, 10, 10, NULL); } fd_Wait (10); } } }
while文は()内の条件が成り立っている間は処理を繰り返しますので、while (true) で無限に処理を繰り返していましたが、プログラムを終了するため、条件を設定します。
while文の条件を分解してみましょう。
while (!fd_rx_buff ()) {
fd_rx_buff ()はキーボード入力のデータ数を取得します。
fd_rx_buff関数の前に!(エクスクラメーションマーク)を付けていますので、これで戻値を反転しています。つまり戻値が0の場合にwhile条件が成り立ちます。戻値が0ということはキーボード入力がないということなので、キーボード入力されるまでwhile文を繰り返すことになります。
while (!fd_GetPB ()) {
fd_GetPB ()はプッシュボタンの押下を検知します。
fd_GetPB関数の前にも!(エクスクラメーションマーク)を付けて戻値を反転しています。つまりwhileの条件はプッシュボタンが押されていなければwhile文を繰り返すことになります。
&&で連結されていますので、whileの条件はキーボードからの入力がなく、かつプッシュボタンも押されていない、となります。
これはSIMPLE TERM上でキーボードからどのキーでも良いので入力するか、プッシュボタンを押すとプログラムが終了するということです。
プログラムが終了すれば、ブートローダのコマンドモードに入り、新たなプログラムの書込みが可能となります。
これによりプログラムを書き込むたびにFDIII-HCの電源をON,OFFしたり、USBケーブルを抜き差しする手間が省けます。
書き込んで試してみて下さい。