1: 2011-07-04 (月) 12:00:35 yoshida | 現: 2011-07-12 (火) 12:33:42 yoshida | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | TITLE:警報装置のプログラミング2 | ||
*プログラミング2 [#q16666ad] | *プログラミング2 [#q16666ad] | ||
[[Chapter2.3 プログラミング1>FDIIICHAPTER2.3]]で赤外線反射センサの値を表示するところまでプログラムを書きました。 | [[Chapter2.3 プログラミング1>FDIIICHAPTER2.3]]で赤外線反射センサの値を表示するところまでプログラムを書きました。 | ||
いよいよブザーを鳴らして完成させます。 | いよいよブザーを鳴らして完成させます。 | ||
+ | |||
+ | **条件分岐 [#v85bf440] | ||
+ | [[処理の流れ>FDIIICHAPTER2.3#x60b5360]]を描いた図を見て下さい。次はセンサ値とある閾値を比較するというところです。センサ値の範囲は0~255である事を確認しました。閾値は例として100にします。後で必要に応じて調節して下さい。~ | ||
+ | #html{{ | ||
+ | <pre class="brush:c"> | ||
+ | #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 (true) { | ||
+ | DX_ReadByteData (100, 27, &ReadData, 10, NULL); | ||
+ | fd_printf ("%3d\r", ReadData); | ||
+ | if (ReadData > 100) { | ||
+ | |||
+ | } | ||
+ | fd_Wait (10); | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
+ | もしセンサ値が100より大きければ{ }内を実行するという条件分岐です。条件分岐は[[if文>FDIIICHAPTER1.4#c6144380]]を使います。~ | ||
+ | ~ | ||
+ | 今回は{ }内にブザーを鳴らすプログラムを書きます。 | ||
+ | |||
+ | **ブザーを鳴らす [#v999f03d] | ||
+ | #html{{ | ||
+ | <pre class="brush:c"> | ||
+ | #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 (true) { | ||
+ | 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); | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
+ | AX-S1のブザーを鳴らす為、音階と音の長さを指定しています。~ | ||
+ | ***[[DX_WriteByteData>FDIIILIB#pb95f8ec]] [#q19c6280] | ||
+ | Dynamixel製品へ1バイトの値を直接設定します。~ | ||
+ | ''第1引数''は、Dynamixelの[[ID>FDIIICHAPTER1.1#s7a3f1f6]]です。AX-S1のIDは100です。~ | ||
+ | |||
+ | ''第2引数''は、[[AX-S1コントロールテーブル>FDIIICHAPTER1.1#ye0e23e2]]のアドレスです。アドレス40は音階、アドレス41は音の長さです。~ | ||
+ | |||
+ | ''第3引数''は、書き込む値です。ここでは例としてそれぞれ10を入力しました。ソの音を1秒(10×0.1秒)鳴らすことになります。~ | ||
+ | |||
+ | ''第4引数''は、タイムアウト時間(ms)です。ここではタイムアウト時間を10msに設定しています。タイムアウトが頻発して正しくデータが設定できない場合はタイムアウト時間を延長して下さい。 | ||
+ | |||
+ | ''第5引数''には本来、エラーの戻り値を入れるための変数のアドレスを指定しますが、今回はエラーの内容を見ないため、NULLを指定しています。 | ||
+ | |||
+ | |||
+ | AX-S1のアドレス40はブザーの音階です。詳細は[[AX-S1コントロールテーブルのBuzzer Data 0>AXS1CNTLTBL#h7380696]]を参照して下さい。 | ||
+ | |||
+ | AX-S1のアドレス41はブザーの音の長さです。0.1秒単位で音の長さを調節します。詳細は[[AX-S1コントロールテーブルのBuzzer Data 1>AXS1CNTLTBL#jdce8043]]を参照して下さい。 | ||
+ | |||
+ | **警報器を動かす [#l7fb3993] | ||
+ | プログラムが完成しました。空行を含めてもたったの18行です。如何ですか?~ | ||
+ | 意外と簡単だと感じられたでしょうか?~ | ||
+ | それではプログラムを書き込んで動かしてみましょう。~ | ||
+ | |||
+ | ここでは書き込み方法を簡単に説明します。詳細は[[Chapter1.3の動作確認>FDIIICHAPTER1.3]]を参照して下さい。~ | ||
+ | |||
+ | -USBケーブルをFDII-HCから取り外します。 | ||
+ | -FDIIIの電源スイッチをOFFにし、プッシュボタンを押しながらUSBケーブルを差し込みます。 | ||
+ | -メニューの「コンパイル」→「ビルド」をクリックします。 | ||
+ | -コンパイルが成功したらOKをクリックし、SIMPLE TERMが起動します。 | ||
+ | -SIMPLE TERMのメニューの「通信」→「ポートオープン」をクリックします。 | ||
+ | -[[プログラムの転送>FDIIICHAPTER1.3#aaed87f4]]を行います。 | ||
+ | -<SUCCESS>と表示されたらキーボードで「g」を入力しプログラムを実行します。 | ||
+ | -FDIII-HCの電源スイッチをONにします。 | ||
+ | |||
+ | ---- | ||
+ | #ref(Warning_pp4.png,100%) | ||
+ | AX-S1の前方センサに手を近づけて行き、センサ値が100を超えるとブザーが鳴るはずです。~ | ||
+ | |||
+ | これを泥棒が入ってきそうな場所に設置しておけば、泥棒が来てもビックリして帰って行くかもしれません。~ | ||
+ | |||
+ | [[次のチャプターへ>FDIIICHAPTER2.5]]~ | ||
+ | |||
+ | [[FDIII-HC Starter Kit Guide>LEARNINGGUIDE]]へ戻る |