この文書の現在のバージョンと選択したバージョンの差分を表示します。
speakerドリル [2015/03/31 19:21] member |
speakerドリル [2015/04/01 01:01] (現在) member |
||
---|---|---|---|
ライン 109: | ライン 109: | ||
===5.動作中の音楽再生(マルチタスク)=== | ===5.動作中の音楽再生(マルチタスク)=== | ||
+ | 項目1~4で自由にメロディーが鳴らせるようになりましたね。 | ||
+ | ここまででも十分楽しいですが、今のままでは音楽を流している間、他の動作は出来ません。ライントレースをしながらメロディーを流したいという人もいますね。 | ||
+ | |||
+ | |||
+ | そこで、マルチタスクのプログラムのヒントを書いていきます。 | ||
+ | |||
+ | |||
+ | 項目1の「ラ(440Hz)の音を鳴らす」を例にとります。 | ||
+ | |||
+ | 先ほどの復習ですが、 | ||
+ | まず割り込みの関数内で1ずつ加算される変数sound_countを用意します。 | ||
+ | そして、メイン関数で、 | ||
+ | while(1){}のかっこの中に1秒間に440回ON/OFFするプログラムを書きましたね。 | ||
+ | |||
+ | このままではメイン関数ではラの音を鳴らす以外のことはできません。 | ||
+ | |||
+ | では、次のことをしてみてください。 | ||
+ | while(1){}のかっこの中のON/OFFするプログラムの「while」を「if」に変える。そのプログラムを切り取って、割り込み関数の中に移す。 | ||
+ | |||
+ | どうですか。上手く行けばラの音がなるはずです。 | ||
+ | |||
+ | 鳴ったところでプログラムを見返してみると、メイン関数ではやることが無くなっているはずです。割り込み関数ではラの音を鳴らしています。ここからがんばって、一つの音を出す関数、メロディーを流す関数を作りましょう。 | ||
+ | |||
+ | 完成すると、メイン関数ではなにもせず、割り込み関数だけでメロディーがならせるようになるはずです。 | ||
+ | ここまで来れば完成です。 | ||
+ | ライントレーサーのプログラムと合体させてもトレースと平行してメロディーが鳴らせますね。 | ||