|
一覧
検索
最新
ページへ戻る
履歴
FDIII-HC Starter Kit Guide Chapter7.3
のバックアップソース(No.2)
knowledge
:
FDIII-HC Starter Kit Guide Chapter7.3
のバックアップソース(No.2)
差分
を表示
現在との差分
を表示
FDIII-HC Starter Kit Guide Chapter7.3
へ行く。
« Prev
Next »
只今編集中です。 *プログラミング [#ha3bcc28] **処理の流れを図にする [#s66356df] **準備 [#k7be398a] GCC Developer Liteを起動します。以下基本的な部分を入力します。 #include <fd.h> #define KEY_QUIT { if(fd_rx_buff()) fd_SoftReset();} void main (void) { fd_Init (0, BT_CONSOLE, FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP, 7.4); } **変数の用意 [#w5bf1723] 入力された文字を取得する変数と、パン(横振り)・チルト(上下振り)のポジション用に使う変数を用意します。 char c; uint16_t PanPosition = 512, TiltPosition = 512; AX-12+のホーンが丁度真ん中になる512に初期化します。 **トルクリミット [#n7c8498d] ID=1と2のAX-12+のトルクリミット(アドレス34,35)を400にします。 fd_DXWriteWordData (1, 34, 400); fd_DXWriteWordData (2, 34, 400); **初期ポジションへ移動 [#v9823fe6] AX-12+のホーンを初期ポジションへ移動します。ゴールポジションはアドレス30,31です。 fd_DXWriteWordData (1, 30, PanPosition); fd_DXWriteWordData (2, 30, TiltPosition); **文字入力を取得する [#wd8c6dc7] while (1) { if (fd_rx_buff() > 0) c = fd_getc (); } fd_rx_buffは、入力された文字数を返す関数です。fd_getcは入力された文字を1文字取得する関数です。 つまり、「もし入力された文字数が0より大きければ(文字が入力されたら)、1文字取得して変数cに代入する」となります。 ** switch文[#y3b41bdd] 取得した文字によって条件を分岐するために[[switch文>http://www.besttechnology.co.jp/modules/knowledge/?FDIII-HC%20Starter%20Kit%20Guide%20Chapter1.4#x577fb19]]を使用します。 キーボードのテンキーを使って上下左右にカメラを動かします。 switch (c) { case '6' : // 右へ break; case '4' : // 左へ break; case '8' : // 上へ break; case '2' : // 下へ break; case '0' : // ブートローダへ break; } キーボードで6を入力すると右へ、4で左へ、8で上へ、2で下へ動くように、0でブートローダへ移行するようにプログラミングします。 **パン [#l35044ee] case '6' : PanPosition --; fd_DXWriteWordData (1, 30, PanPosition); break; case '4' : PanPosition ++; fd_DXWriteWordData (1, 30, PanPosition); break; もし6が入力されたらPanPositionを1マイナスし、ポジションを送信します。 もし4が入力されたらPanPositionを1プラスし、ポジションを送信します。 **チルト [#w4773b87] case '8' : TiltPosition --; fd_DXWriteWordData (2, 30, TiltPosition); break; case '2' : TiltPosition ++; fd_DXWriteWordData (2, 30, TiltPosition); break; もし8が入力されたらTiltPositionを1マイナスし、ポジションを送信します。 もし2が入力されたらTiltPositionを1プラスし、ポジションを送信します。 **ブートローダへ移行 [#vf532598] ブートローダへ移行する関数はfd_SoftResetです。 case '0' : fd_SoftReset(); break; **ポジションリミット [#v0593392] フレームが干渉してしまうようなポジションを送信するととても危険です。 AX-12+に過大な負荷がかかり、破損する場合がありますので、十分注意しましょう。 case '6' : PanPosition --; if (PanPosition < 0) PanPosition = 0; fd_DXWriteWordData (1, 30, PanPosition); break; PanPositionが0より小さいなら、PanPositionを0にします。 case '4' : PanPosition ++; if (PanPosition > 1023) PanPosition = 1023; fd_DXWriteWordData (1, 30, PanPosition); break; PanPositionが1023より大きいなら、PanPositionを1023にします。 case '8' : TiltPosition --; if (TiltPosition < 200) TiltPosition = 200; fd_DXWriteWordData (2, 30, TiltPosition); break; TiltPositionが200より小さいなら、TiltPositionを200にします。 取り付け方によっては、数値が異なります。フレームが干渉しないように十分確認して下さい。 case '2' : TiltPosition ++; if (TiltPosition > 800) TiltPosition = 800; fd_DXWriteWordData (2, 30, TiltPosition); break; TiltPositionが800より大きいなら、TiltPositionを800にします。 取り付け方によっては、数値が異なります。フレームが干渉しないように十分確認して下さい。 **値の表示 [#u0c09df1] PanPositionとTiltPositionの値を表示します。 fd_printf("Pan:%5d Tilt:%5d\r", PanPosition, TiltPosition); プログラムを実行してみましょう。 **uint16_tの範囲 [#c77a4128] 6を入力すると、PanPositionがだんだん減って0になり、その後65535という大きな数字になってしまいます。 これは変数の型がuint16_tだからです。uint16_tはC言語でいうところのunsigned shortと同じで、値の範囲は0~65535です。そのため0から1マイナスすると65535になるのです。 case '6' : PanPosition --; if (PanPosition > 60000) PanPosition = 0; fd_DXWriteWordData (1, 30, PanPosition); break; if文の条件を「PanPositionが60000より大きければ」に変えてみましょう。
« Prev
Next »
FDIII-HC Starter Kit Guide Chapter7.3 のバックアップ一覧
FDIII-HC Starter Kit Guide Chapter7.3 のバックアップソース(No. All)
1: 2010-07-26 (月) 19:07:14
eid7gud
2: 2010-07-26 (月) 20:04:34
eid7gud
現: 2010-07-27 (火) 13:45:28
eid7gud
Copyright© 1989,2024 BestTechnology Co.,Ltd.
メニュー
トップ
ニュース
お知らせ
新商品情報
更新情報
マニュアル類
技術情報
チュートリアル
FAQ
お問合せ
技術的なお問合せ
その他お問合せ
お見積り
ブログ
会社案内
ショッピング
ご利用案内
検索
カテゴリ 一覧
ロボットキット
Dynamixelシリーズ
マイコンボード
相撲ロボット
センサ
通信機器
お客様ページ