4: 2010-02-23 (火) 19:57:08 eid7gud | 5: 2010-02-24 (水) 19:17:28 eid7gud | ||
---|---|---|---|
Line 19: | Line 19: | ||
**不要部位を削除 [#y36d4588] | **不要部位を削除 [#y36d4588] | ||
+ | #ref(SoundMeter_p3.png) | ||
今回のプログラムでは条件による分岐がありませんので、以下のif~else~文を削除します。 | 今回のプログラムでは条件による分岐がありませんので、以下のif~else~文を削除します。 | ||
if (ReadData > 100) { | if (ReadData > 100) { | ||
Line 31: | Line 32: | ||
[[AX-S1コントロールテーブル>FDIII-HC Starter Kit Guide Chapter1.1#u70f1fa1]]を見て下さい。音量最大保持値はアドレス36です。 | [[AX-S1コントロールテーブル>FDIII-HC Starter Kit Guide Chapter1.1#u70f1fa1]]を見て下さい。音量最大保持値はアドレス36です。 | ||
- | 音量最大保持値はアドレス36の音量測定値の最大値を保持し続けます。 | + | 音量最大保持値はアドレス35の音量測定値の最大値を保持し続けます。 |
fd_DXReadByteData (100, 27, &ReadData); | fd_DXReadByteData (100, 27, &ReadData); | ||
の第2引数を36に書き換えます。 | の第2引数を36に書き換えます。 | ||
Line 37: | Line 38: | ||
**AX-12+のホーンを動かす [#a86b83f6] | **AX-12+のホーンを動かす [#a86b83f6] | ||
+ | #ref(SoundMeter_p4.png) | ||
AX-12+のホーンの角度をメーターに見立て、音量最大保持値に対応した角度にホーンを動かします。 | AX-12+のホーンの角度をメーターに見立て、音量最大保持値に対応した角度にホーンを動かします。 | ||
AX-12+のホーンを動かすには、AX-12+のコントロールテーブルのアドレス30,31にゴールポジションを書き込みます。2バイトのデータを書き込むにはfd_DXWriteWordData関数を使います。詳しくは[[Chapter3.3のバーを開ける>FDIII-HC Starter Kit Guide Chapter3.3#icc81839]]を参照して下さい。 | AX-12+のホーンを動かすには、AX-12+のコントロールテーブルのアドレス30,31にゴールポジションを書き込みます。2バイトのデータを書き込むにはfd_DXWriteWordData関数を使います。詳しくは[[Chapter3.3のバーを開ける>FDIII-HC Starter Kit Guide Chapter3.3#icc81839]]を参照して下さい。 | ||
fd_DXWriteWordData (1, 30, ゴールポジション); | fd_DXWriteWordData (1, 30, ゴールポジション); | ||
- | ゴールポジションの部分には何を入れるべきでしょうか? | + | ゴールポジションの部分には何を入れれば良いでしょう? |
音量最大保持値に対応した角度にAX-12+のホーンを動かしますので、ゴールポジション=音量最大保持値です。~ | 音量最大保持値に対応した角度にAX-12+のホーンを動かしますので、ゴールポジション=音量最大保持値です。~ | ||
Line 47: | Line 49: | ||
fd_DXReadByteData (100, 36, &ReadData); | fd_DXReadByteData (100, 36, &ReadData); | ||
で変数ReadDataに代入されます。従ってゴールポジションにはReadDataと書きます。 | で変数ReadDataに代入されます。従ってゴールポジションにはReadDataと書きます。 | ||
+ | |||
+ | fd_printf ("%3d\r", ReadData); の後ろに | ||
fd_DXWriteWordData (1, 30, ReadData); | fd_DXWriteWordData (1, 30, ReadData); | ||
+ | と入力します。 | ||
ReadDataの前に&は付けません。変数の前に&を付けるとその変数の[[アドレス>FDIII-HC Starter Kit Guide Chapter1.4#b45fcfd3]]になります。 | ReadDataの前に&は付けません。変数の前に&を付けるとその変数の[[アドレス>FDIII-HC Starter Kit Guide Chapter1.4#b45fcfd3]]になります。 | ||
ゴールポジションに書き込むのは、ReadDataのアドレスではなく、ReadDataに入っている値です。 | ゴールポジションに書き込むのは、ReadDataのアドレスではなく、ReadDataに入っている値です。 | ||
**ゴールポジションと音量最大保持値のデータ範囲 [#p2dbd58e] | **ゴールポジションと音量最大保持値のデータ範囲 [#p2dbd58e] | ||
+ | #ref(SoundMeter_p5.png) | ||
ゴールポジションのデータの範囲は0~1023でした。 | ゴールポジションのデータの範囲は0~1023でした。 | ||
+ | 音量最大保持値のデータ範囲はどうでしょう。 | ||
+ | |||
+ | 音量センサの値は[[Chapter2.5の課題>FDIII-HC Starter Kit Guide Chapter2.5]]で紹介した通り、128を中心に音がすると音量に応じて上下に揺れます。 | ||
+ | 音量最大保持値は音量センサの最大値なので、音量最大保持値の範囲は128~255となります。 | ||
+ | |||
+ | ゴールポジションはせっかく0~1023の範囲があるので、音量最大保持値を3倍した値を代入することで、コールポジションの範囲を384~765にします。~ | ||
+ | つまり音量最大保持値が128のときゴールポジションは384、200のとき600、255のとき765になります。 | ||
+ | |||
+ | fd_DXWriteWordData (1, 30, ReadData * 3); | ||
+ | |||
+ | 上記のように書き換えます。*は掛け算です。 | ||
+ | |||
+ | **音量最大保持値のリセット [#k6c85475] | ||
+ | 音量最大保持値は音量の最大値を保持し続けます。従って一度値が最大の255になると、それ以降は255から変化することはありません。もう一度測定するために音量最大保持値をプッシュボタンで値をリセットするようにします。 | ||
+ | |||
+ | ***プッシュボタンの取得 [#i2b73f37] | ||
+ | #ref(SoundMeter_p6.png) | ||
+ | 以下はFDIII-HCのプッシュボタンの状態を取得する関数です。 | ||
+ | bool fd_GetPB (void); | ||
+ | |||
+ | ''戻り値''はプッシュボタンの状態です。ボタンが押されているとtrueを返し、押されていないとfalseを返します。 | ||
+ | ''引数''はありません。 | ||
+ | |||
+ | uint8_t ReadData;の後ろに | ||
+ | bool PB; | ||
+ | と入力します。 | ||
+ | プッシュボタンの状態を保存するための変数です。 | ||
+ | boolは、true又はfalseで表されるデータの型です。 | ||
+ | |||
+ | fd_DXWriteWordData (1, 30, ReadData * 3); の後ろに | ||
+ | PB = fd_GetPB(); | ||
+ | と入力します。変数PBにプッシュボタンの状態がtrue(押されている)、false(押されていない)で代入されます。 | ||
+ | |||
+ | ***プッシュボタンが押されたら [#z76b3e95] | ||
+ | #ref(SoundMeter_p7.png) | ||
+ | プッシュボタンが押されたら音量最大保持値をリセットします。前項より「プッシュボタンが押されたら」は、もし変数PBがtrueならと言い代えられます。 | ||
+ | もし~なら~という条件分岐には、if分を使います。 | ||
+ | |||
+ | PB = fd_GetPB();の後ろに | ||
+ | if(PB == true){ | ||
+ | |||
+ | } | ||
+ | と入力します。PB=trueではなくPB==trueです。「=」だとPBにtrueが代入されてしまい、ifの条件にはなりません。 | ||
+ | 変数PBがtrueなら、つまりプッシュボタンが押されたら{ }内を実行します。 | ||
+ | |||
+ | ***音量最大保持値をリセットする。 [#xd0d0980] | ||
+ | #ref(SoundMeter_p8.png) | ||
+ | fd_DXWriteByteData関数でAX-S1の音量最大保持値(アドレス36)に0を書き込みます。 | ||
+ | if(PB == true){の後に | ||
+ | fd_DXWriteByteData (100, 36, 0); | ||
+ | と入力します。 | ||
+ | 第1引数のIDは100、第2引数のアドレスは36、第3引数の書き込む値は0です。 | ||
+ | |||
+ | **動作確認 [#f2fe98cd] | ||
+ | #include <fd.h> | ||
+ | #define KEY_QUIT { if(fd_rx_buff()) fd_SoftReset();} | ||
+ | |||
+ | void main (void) { | ||
+ | uint8_t ReadData; | ||
+ | bool PB; | ||
+ | |||
+ | fd_Init (0, BT_CONSOLE, FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP, 7.4); | ||
+ | fd_DXWriteWordData (1, 34, 200); | ||
+ | |||
+ | while (1) { | ||
+ | fd_DXReadByteData (100, 36, &ReadData); | ||
+ | fd_printf ("%3d\r", ReadData); | ||
+ | fd_DXWriteWordData (1, 30, ReadData * 3); | ||
+ | PB = fd_GetPB(); | ||
+ | if(PB == true){ | ||
+ | fd_DXWriteByteData (100, 36, 0); | ||
+ | } | ||
+ | KEY_QUIT; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | プログラムが完成しました。プログラムを書き込んで動かしてみましょう。 | ||
+ | |||
+ | |||
+ | [[次のチャプターへ>FDIII-HC Starter Kit Guide Chapter4.4]]~ | ||
+ | |||
+ | [[FDIII-HC Starter Kit Guide]]へ戻る |