現在編集中です。 #ref(AutomaticDoor_13.png,100%) 「AX-S1の距離センサに人が反応したら、AX-12+でバーを開く」というプログラムを作成します~ Chapter2で「AX-S1の距離センサに泥棒が反応したら、AX-S1のブザーを鳴らして脅かす」というプログラムを作りました。違いはAX-S1のブザーを鳴らすか、AX-12+を動かすかだけです。 **処理の流れを図にする [#t29737cd] 処理の流れを図にしましょう。 #ref(AutomaticDoor_14.png,100%) Chapter2との違いはブザーを鳴らす代わりに、センサ値が閾値以上ならバーを開け、閾値以下ならバーを閉じるという所です。人が来てバーが開いたと思ったら直ぐ閉じてしまうと困るのでその後に少し待機します。 **準備 [#o28e1018] GCC Developer Liteを起動して、Chapter2で作成した警報器のプログラムを開いて下さい。~ メニューの「ファイル」 -> 「開く」 -> ファイル(AlarmUnit.c)選択しを「開く」~ #include <fd.h> #define KEY_QUIT { if(fd_rx_buff()) fd_SoftReset();} void main (void) { uint8_t ReadData; fd_Init (0, BT_CONSOLE, FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP, 7.4); while (1) { fd_DXReadByteData (100, 27, &ReadData); fd_printf ("%3d\r", ReadData); if (ReadData > 100) { fd_DXWriteByteData (100, 40, 10); fd_DXWriteByteData (100, 41, 10); } KEY_QUIT; } } プログラムは上記のようになっているでしょうか。~ Chapter2.5の補足で追加した箇所があります。 #define KEY_QUIT { if(fd_rx_buff()) fd_SoftReset();} と KEY_QUIT; については[[Chapter2.5のソフトウェアリセット>FDIII-HC Starter Kit Guid Chapter2.5#e7171726]]をご覧下さい。 fd_Init (0, BT_CONSOLE, FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP, 7.4); については[[Chapter2.5のFDIII-HCのブザーを鳴らす>FDIII-HC Starter Kit Guid Chapter2.5#vb6f386d]]をご覧下さい。 ---- ファイルを別の名前で保存しましょう。 メニューの「ファイル」 -> 「名前を付けて保存」 -> ファイル名に「AutomaticDoor.c」と入力して適当なフォルダの中へ「保存」 **ブザーを鳴らす部分を削除 [#ma9b92ad] #ref(AutomaticDoor_15.png,100%) fd_DXWriteByteData (100, 40, 10); fd_DXWriteByteData (100, 41, 10); はブザーを鳴らす部分です。今回は必要ありませんので削除します。 **バーを開ける [#icc81839] #ref(AutomaticDoor_16.png,100%) センサ値と閾値を比較するif分の { } の中に fd_DXWriteWordData (1, 30, 300); と入力して下さい。 これはAX-12+に2バイトのデータを書き込むための関数です。 #ref(AutomaticDoor_17.png,100%) fd_DXWriteWordDataは関数名です。 ''第1引数''はDynamixelのIDです。付属のAX-12+のIDは1です。 ''第2引数''はAX-12+のコントロールテーブルのアドレスです。[[AX-12+コントロールテーブル>FDIII-HC Starter Kit Guid Chapter1.1#xa86a787]]を見て下さい。AX-12+のホーンの位置の指令は、アドレス30と31のゴールポジションにデータを書くことで行います。~ ゴールポジションはアドレス2つ分(2バイト)で表されます。2バイトのデータで表されているので、fd_DXWriteByteData関数(1バイドのデータを書き込む)ではなく、fd_DXWriteWordData関数(2バイドのデータを書き込む)を使います。 ''第3引数''はゴールポジションの値です。 #ref(AutomaticDoor_18.png,100%) AX-12+のホーンは図のように0°から300°まで回転します。ゴールポジションの値は0°なら0、中心の150°なら512、300°なら1023になります。~ #ref(AutomaticDoor_19.png,100%) バーが開いている状態は大凡0°と150°の真ん中として、ゴールポジションの値を300にしました。もし、AX-12+を反対向きにに付けた場合は700位にしましょう。
(This host) = https://www.besttechnology.co.jp