1: 2010-01-21 (木) 18:26:31 eid7gud | |||
---|---|---|---|
Line 1: | Line 1: | ||
+ | *プログラミング [#m6ec823e] | ||
+ | #ref(SoundMeter_p1.png) | ||
+ | 「AX-S1で最大音量を測定し、それに対応した角度へAX-12+のホーン動かす」というプログラムを作成します。 | ||
+ | **処理の流れを図にする。 [#z3dcce2c] | ||
+ | 先ず処理の流れを図にします。 | ||
+ | #ref(SoundMeter_p2.png) | ||
+ | 処理の流れとしては、AX-S1の最大音量を取得し、それに対応した角度へAX-12+のホーン動かすを繰り返すだけとなります。 | ||
+ | **準備 [#r9783670] | ||
+ | GCC Developer Liteを起動して、Chapter3で作成したプログラムを開いて下さい。 | ||
+ | |||
+ | メニューの「ファイル」→「開く」→ ファイル(AutomaticDoor.c)を選択し、「開く」をクリックします。 | ||
+ | ---- | ||
+ | ファイルを別の名前で保存します。 | ||
+ | |||
+ | メニューの「ファイル」→「名前を付けて保存」→ファイル名に「SoundMeter.c」と入力し、[[Chapter1.3>FDIII-HC Starter Kit Guide Chapter1.3]]で作成したSampleフォルダに「保存」します。 | ||
+ | |||
+ | **不要部位を削除 [#y36d4588] | ||
+ | 今回のプログラムでは条件による分岐がありませんので、以下のif~else~文を削除します。 | ||
+ | if (ReadData > 100) { | ||
+ | fd_DXWriteWordData (1, 30, 300); | ||
+ | fd_Wait (2000); | ||
+ | } | ||
+ | else { | ||
+ | fd_DXWriteWordData (1, 30, 512); | ||
+ | } | ||
+ | **音量最大値取得 [#q67b1dd0] | ||
+ | Chapter3ではAX-S1の正面赤外線反射センサの値を取得しました。今回は最大音量を取得します。[[AX-S1コントロールテーブル>FDIII-HC Starter Kit Guide Chapter1.1#u70f1fa1]]を見て下さい。音量最大保持値はアドレス36です。 | ||
+ | 音量最大保持値はアドレス35の音量測定値の最大値を保持し続けます。 | ||
+ | fd_DXReadByteData (100, 27, &ReadData); | ||
+ | の第2引数を36に書き換えます。 | ||
+ | fd_DXReadByteData (100, 36, &ReadData); | ||
+ | |||
+ | **AX-12+のホーンを動かす [#a86b83f6] | ||
+ | AX-12+のホーンの角度をメーターに見立て、音量最大保持値に対応した角度にホーンを動かします。 | ||
+ | AX-12+のホーンを動かすには、AX-12+のコントロールテーブルのアドレス30,31にゴールポジションを書き込みます。2バイトのデータを書き込むにはfd_DXWriteWordData関数を使います。詳しくは[[Chapter3.3のバーを開ける>FDIII-HC Starter Kit Guide Chapter3.3#icc81839]]を参照して下さい。 | ||
+ | fd_DXWriteWordData (1, 30, ゴールポジション); | ||
+ | ゴールポジションに書き込む値には何を入れるべきでしょうか? | ||
+ | |||
+ | 音量最大保持値に対応した角度にAX-12+のホーンを動かしますので、ゴールポジション=音量最大保持値です。~ | ||
+ | 音量最大保持値は | ||
+ | fd_DXReadByteData (100, 27, &ReadData); | ||
+ | で変数ReadDataに代入されます。従ってゴールポジションにはReadDataと書きます。 | ||
+ | fd_DXWriteWordData (1, 30, ReadData); |