4: 2011-07-05 (火) 17:44:55 yoshida | 現: 2013-04-09 (火) 23:46:46 takaboo | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | TITLE:プログラミング | + | TITLE:騒音計のプログラミング |
*プログラミング [#c7bb54c8] | *プログラミング [#c7bb54c8] | ||
#ref(SoundMeter_1.png) | #ref(SoundMeter_1.png) | ||
- | 「AX-S1で最大音量を測定し、それに対応した角度へAX-12+のホーンを動かす」というプログラムを作成します。 | + | 「AX-S1で最大音量を測定し、それに対応した角度へAX-12Aのホーンを動かす」というプログラムを作成します。 |
**処理の流れを図にする。 [#fac5abab] | **処理の流れを図にする。 [#fac5abab] | ||
先ず処理の流れを図にします。 | 先ず処理の流れを図にします。 | ||
#ref(flow.png) | #ref(flow.png) | ||
- | AX-S1の最大音量を取得し、それに対応した角度へAX-12+のホーンを動かすを繰り返すだけとなります。 | + | AX-S1の最大音量を取得し、それに対応した角度へAX-12Aのホーンを動かすを繰り返すだけとなります。 |
**準備 [#m074851f] | **準備 [#m074851f] | ||
Line 20: | Line 20: | ||
**バーの開閉から音量最大値の取得へ変更 [#tfcaa108] | **バーの開閉から音量最大値の取得へ変更 [#tfcaa108] | ||
バーの開閉部分を削除し、正面赤外線センサの値の取得を音量最大値の取得へ変更します。 | バーの開閉部分を削除し、正面赤外線センサの値の取得を音量最大値の取得へ変更します。 | ||
- | #ref(gcc_edit_1.png,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); | ||
+ | |||
+ | fd_DXSetTorqueLimit (1, 154); | ||
+ | |||
+ | while (!fd_rx_buff () && !fd_GetPB ()) { | ||
+ | DX_ReadByteData (100, 27, &ReadData, 10, NULL); | ||
+ | fd_printf ("%3d\r", ReadData); | ||
+ | if (ReadData > 100) { | ||
+ | fd_DXSetPosition (1, 300); | ||
+ | fd_Wait (2000); | ||
+ | } else { | ||
+ | fd_DXSetPosition (1, 512); | ||
+ | } | ||
+ | fd_Wait (10); | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
+ | #ref(down_arrow.png) | ||
+ | #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 () && !fd_GetPB ()) { | ||
+ | DX_ReadByteData (100, 36, &ReadData, 10, NULL); | ||
+ | fd_printf ("%3d\r", ReadData); | ||
+ | fd_Wait (10); | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
DX_ReadByteDataの第2引数を27から36へ変更します。 | DX_ReadByteDataの第2引数を27から36へ変更します。 | ||
[[AX-S1コントロールテーブル>FDIIICHAPTER1.1#ye0e23e2]]にある通り、音量最大保持値はアドレス36です。 | [[AX-S1コントロールテーブル>FDIIICHAPTER1.1#ye0e23e2]]にある通り、音量最大保持値はアドレス36です。 | ||
音量最大保持値はアドレス35の音量測定値の最大値を保持し続けます。 | 音量最大保持値はアドレス35の音量測定値の最大値を保持し続けます。 | ||
- | **AX-12+のホーンを動かす [#r33f5d9f] | + | **AX-12Aのホーンを動かす [#r33f5d9f] |
- | #ref(gcc_edit_2.png) | + | #html{{ |
- | AX-12+のホーンの角度をメーターに見立て、音量最大保持値に対応した角度にホーンを動かします。 | + | <pre class="brush:c"> |
+ | #include <fd.h> | ||
+ | void main (void) { | ||
+ | uint8_t ReadData; | ||
- | AX-12+のホーンを動かすには、fd_DXSetPosition関数を使います。詳しくは[[Chapter3.3のブザーを鳴らすからバーを開けるに変更>FDIIICHAPTER3.3#o54aa8b3]]を参照して下さい。 | + | fd_SetBeepCondition (FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP); |
+ | fd_SetUVThreshold (7.4); | ||
+ | DX_ChangeBaudrate (1000000); | ||
- | 音量最大保持値に対応した角度にAX-12+のホーンを動かしますので、ゴールポジション=音量最大保持値です。~ | + | fd_DXSetTorqueLimit (1, 154); |
- | 音量最大保持値は | + | |
- | DX_ReadByteData (100, 36, &ReadData, 10, NULL); | + | while (!fd_rx_buff () && !fd_GetPB ()) { |
- | で変数ReadDataに代入されます。従ってゴールポジションにはReadDataと書きます。 | + | DX_ReadByteData (100, 36, &ReadData, 10, NULL); |
+ | fd_printf ("%3d\r", ReadData); | ||
+ | fd_DXSetPosition (1, ReadData); | ||
+ | fd_Wait (10); | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
+ | AX-12Aのホーンの角度をメーターに見立て、音量最大保持値に対応した角度にホーンを動かします。 | ||
+ | |||
+ | AX-12Aのホーンを動かすには、fd_DXSetPosition関数を使います。詳しくは[[Chapter3.3のブザーを鳴らすからバーを開けるに変更>FDIIICHAPTER3.3#o54aa8b3]]を参照して下さい。 | ||
+ | |||
+ | 音量最大保持値に対応した角度にAX-12Aのホーンを動かしますので、ゴールポジション=音量最大保持値です。~ | ||
+ | 音量最大保持値は変数ReadDataに代入されますので、そのままゴールポジションにReadDataを指定します。 | ||
ReadDataの前に&は付けません。変数の前に&を付けるとその変数のアドレスになります。 | ReadDataの前に&は付けません。変数の前に&を付けるとその変数のアドレスになります。 | ||
Line 40: | Line 104: | ||
**ゴールポジションと音量最大保持値のデータ範囲 [#ke591b16] | **ゴールポジションと音量最大保持値のデータ範囲 [#ke591b16] | ||
- | #ref(gcc_edit_3.png) | + | #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 () && !fd_GetPB ()) { | ||
+ | DX_ReadByteData (100, 36, &ReadData, 10, NULL); | ||
+ | fd_printf ("%3d\r", ReadData); | ||
+ | fd_DXSetPosition (1, ReadData * 3); | ||
+ | fd_Wait (10); | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
ゴールポジションのデータの範囲は0~1023でした。 | ゴールポジションのデータの範囲は0~1023でした。 | ||
音量最大保持値のデータ範囲はどうでしょう。 | 音量最大保持値のデータ範囲はどうでしょう。 | ||
Line 52: | Line 136: | ||
**音量最大保持値のリセット [#ie242320] | **音量最大保持値のリセット [#ie242320] | ||
音量最大保持値は、音量の最大値を保持し続けます。従って一度値が最大の255になると、それ以降は255から変化することはありません。もう一度初めから測定するために音量最大保持値をプッシュボタンでリセットするようにします。 | 音量最大保持値は、音量の最大値を保持し続けます。従って一度値が最大の255になると、それ以降は255から変化することはありません。もう一度初めから測定するために音量最大保持値をプッシュボタンでリセットするようにします。 | ||
- | #ref(gcc_edit_4.png,100%) | ||
- | while文で使用していたプッシュボタンの条件を外し、新たにゴールポジション設定後にif文の条件として使用します。 | ||
- | プッシュボタンが押されたらリセットを行いますので、!(エクスクラメーションマーク)は除きます。 | ||
- | リセットはアドレス36(音量最大保持値)に0を書込むことで実施します。 | ||
- | |||
- | **動作確認 [#i7d7d3c6] | ||
#html{{ | #html{{ | ||
- | <pre class="brush: c"> | + | <pre class="brush:c"> |
#include <fd.h> | #include <fd.h> | ||
void main (void) { | void main (void) { | ||
uint8_t ReadData; | uint8_t ReadData; | ||
+ | |||
fd_SetBeepCondition (FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP); | fd_SetBeepCondition (FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP); | ||
fd_SetUVThreshold (7.4); | fd_SetUVThreshold (7.4); | ||
DX_ChangeBaudrate (1000000); | DX_ChangeBaudrate (1000000); | ||
+ | |||
fd_DXSetTorqueLimit (1, 154); | fd_DXSetTorqueLimit (1, 154); | ||
+ | |||
while (!fd_rx_buff ()) { | while (!fd_rx_buff ()) { | ||
DX_ReadByteData (100, 36, &ReadData, 10, NULL); | DX_ReadByteData (100, 36, &ReadData, 10, NULL); | ||
fd_printf ("%3d\r", ReadData); | fd_printf ("%3d\r", ReadData); | ||
- | fd_DXSetPosition (1, ReadData * 3); | + | fd_DXSetPosition (1, ReadData); |
if (fd_GetPB ()) { | if (fd_GetPB ()) { | ||
DX_WriteByteData (100, 36, 0, 10, NULL); | DX_WriteByteData (100, 36, 0, 10, NULL); | ||
Line 82: | Line 160: | ||
</pre> | </pre> | ||
}} | }} | ||
+ | while文で使用していたプッシュボタンの条件を外し、新たにゴールポジション設定後にif文の条件として使用します。 | ||
+ | プッシュボタンが押されたらリセットを行いますので、!(エクスクラメーションマーク)は除きます。 | ||
+ | リセットはアドレス36(音量最大保持値)に0を書込むことで実施します。 | ||
+ | **動作確認 [#i7d7d3c6] | ||
プログラムが完成しました。プログラムを書き込んで動かしてみましょう。 | プログラムが完成しました。プログラムを書き込んで動かしてみましょう。 | ||
- | FDIII-HCのプッシュボタンを押しリセットしてから、音を出すとAX-12+が音量に応じて動くことを確認しましょう。 | + | FDIII-HCのプッシュボタンを押しリセットしてから、音を出すとAX-12Aが音量に応じて動くことを確認しましょう。 |
#ref(SoundMeter_p9.png) | #ref(SoundMeter_p9.png) | ||
Line 91: | Line 173: | ||
[[次のチャプターへ>FDIIICHAPTER4.4]]~ | [[次のチャプターへ>FDIIICHAPTER4.4]]~ | ||
- | [[FDIII-HC Learning Guide]]へ戻る | + | [[FDIII-HC Starter Kit Guide>LEARNINGGUIDE]]へ戻る |