3: 2011-07-05 (火) 14:01:53 yoshida | 4: 2011-07-05 (火) 17:44:55 yoshida | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | TITLE:プログラミング | ||
*プログラミング [#c7bb54c8] | *プログラミング [#c7bb54c8] | ||
#ref(SoundMeter_1.png) | #ref(SoundMeter_1.png) | ||
Line 24: | Line 25: | ||
音量最大保持値はアドレス35の音量測定値の最大値を保持し続けます。 | 音量最大保持値はアドレス35の音量測定値の最大値を保持し続けます。 | ||
- | **アクチュエータのホーンを動かす [#r33f5d9f] | + | **AX-12+のホーンを動かす [#r33f5d9f] |
#ref(gcc_edit_2.png) | #ref(gcc_edit_2.png) | ||
- | アクチュエータのホーンの角度をメーターに見立て、音量最大保持値に対応した角度にホーンを動かします。 | + | AX-12+のホーンの角度をメーターに見立て、音量最大保持値に対応した角度にホーンを動かします。 |
- | アクチュエータのホーンを動かすには、fd_DXSetPosition関数を使います。詳しくは[[Chapter3.3のブザーを鳴らすからバーを開けるに変更>FDIIICHAPTER3.3#o54aa8b3]]を参照して下さい。 | + | AX-12+のホーンを動かすには、fd_DXSetPosition関数を使います。詳しくは[[Chapter3.3のブザーを鳴らすからバーを開けるに変更>FDIIICHAPTER3.3#o54aa8b3]]を参照して下さい。 |
- | 音量最大保持値に対応した角度にアクチュエータのホーンを動かしますので、ゴールポジション=音量最大保持値です。~ | + | 音量最大保持値に対応した角度にAX-12+のホーンを動かしますので、ゴールポジション=音量最大保持値です。~ |
音量最大保持値は | 音量最大保持値は | ||
- | fd_DXReadByteData (100, 36, &ReadData); | + | DX_ReadByteData (100, 36, &ReadData, 10, NULL); |
で変数ReadDataに代入されます。従ってゴールポジションにはReadDataと書きます。 | で変数ReadDataに代入されます。従ってゴールポジションにはReadDataと書きます。 | ||
ReadDataの前に&は付けません。変数の前に&を付けるとその変数のアドレスになります。 | ReadDataの前に&は付けません。変数の前に&を付けるとその変数のアドレスになります。 | ||
ゴールポジションに書き込むのは、ReadDataのアドレスではなく、ReadDataに入っている値です。 | ゴールポジションに書き込むのは、ReadDataのアドレスではなく、ReadDataに入っている値です。 | ||
+ | |||
+ | **ゴールポジションと音量最大保持値のデータ範囲 [#ke591b16] | ||
+ | #ref(gcc_edit_3.png) | ||
+ | ゴールポジションのデータの範囲は0~1023でした。 | ||
+ | 音量最大保持値のデータ範囲はどうでしょう。 | ||
+ | |||
+ | 音量センサの値は[[Chapter2.5の課題>FDIIICHAPTER2.5]]で紹介した通り、128を中心に音がすると音量に応じて上下に揺れます。 | ||
+ | 音量最大保持値は音量センサの最大値を保持した値なので、音量最大保持値の範囲は128~255となります。 | ||
+ | |||
+ | ゴールポジションはせっかく0~1023の範囲があるので、音量最大保持値を3倍した値を代入することで、コールポジションの範囲を384~765にします。~ | ||
+ | つまり音量最大保持値が128のときゴールポジションは384、200のとき600、255のとき765になります。 | ||
+ | |||
+ | **音量最大保持値のリセット [#ie242320] | ||
+ | 音量最大保持値は、音量の最大値を保持し続けます。従って一度値が最大の255になると、それ以降は255から変化することはありません。もう一度初めから測定するために音量最大保持値をプッシュボタンでリセットするようにします。 | ||
+ | #ref(gcc_edit_4.png,100%) | ||
+ | while文で使用していたプッシュボタンの条件を外し、新たにゴールポジション設定後にif文の条件として使用します。 | ||
+ | プッシュボタンが押されたらリセットを行いますので、!(エクスクラメーションマーク)は除きます。 | ||
+ | リセットはアドレス36(音量最大保持値)に0を書込むことで実施します。 | ||
+ | |||
+ | **動作確認 [#i7d7d3c6] | ||
+ | #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); | ||
+ | |||
+ | fd_DXSetTorqueLimit (1, 154); | ||
+ | |||
+ | while (!fd_rx_buff ()) { | ||
+ | DX_ReadByteData (100, 36, &ReadData, 10, NULL); | ||
+ | fd_printf ("%3d\r", ReadData); | ||
+ | fd_DXSetPosition (1, ReadData * 3); | ||
+ | if (fd_GetPB ()) { | ||
+ | DX_WriteByteData (100, 36, 0, 10, NULL); | ||
+ | } | ||
+ | fd_Wait (10); | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
+ | |||
+ | プログラムが完成しました。プログラムを書き込んで動かしてみましょう。 | ||
+ | |||
+ | FDIII-HCのプッシュボタンを押しリセットしてから、音を出すとAX-12+が音量に応じて動くことを確認しましょう。 | ||
+ | |||
+ | #ref(SoundMeter_p9.png) | ||
+ | |||
+ | [[次のチャプターへ>FDIIICHAPTER4.4]]~ | ||
+ | |||
+ | [[FDIII-HC Learning Guide]]へ戻る |