Arduinoでmidi制御をしたい!っていうのであれば、シリアル通信の次に必要なのはタイマ割り込みです。これがないと、正確なクロック信号は出せない。と言うわけで、タイマ割り込みの使い方なんぞを。
■タイマ割り込みってなんぞ? タイマ割り込みっていうのは、CPU(コンピュータ)に「一定の間隔で」仕事をさせるための仕組みになります。例えば、あなたがまんじゅうを作って箱詰めをする仕事をしています。仕事はめいっぱいのパワーでやって頂いて構わないのですが、1時間置きに上司に進捗を電話する必要があります。ところが、上司は13時であれば13時から13時3分の3分間しか電話の前に居ません。そうすると、あなたは、まんじゅうの箱詰めをやりながら常に時間を気にしなくちゃいけない。あなたがまんじゅうの仕事に集中するには、1時間毎に時刻を知らせてくれる腕時計が必要になります。この腕時計の仕事をするのがタイマ割り込みです。 midiコントローラを作るのであれば、基本bpm制御は必要。このbpm制御に使用するわけです。 ■Arduinoのタイマ割り込み じゃ、Arduinoのタイマ割り込みを見てみましょう。Arduinoには、「timer1」と「MsTimer2」の2つ。大まかな事はdenkitribeさんのブログで紹介されています。 □Arduino のタイマー割り込みライブラリ http://d.hatena.ne.jp/KZR/20090804/p1 つまり大まかに言えば ・timer1の方が精度が高い(μ:m) ・どちらもPWMの影響を受ける(与える) ・Timer1は9,10、MsTimer2は3,11ピンのPWM制御に使っている の3点。PWMっていうのは、「パルス幅変調」の事でアナログの出力に使用してます。詳しくはwikiでも見て欲しいんだけど、おおざっぱに言えば、on/offの2値しかなくても、スッゲェ速度でon/offをくり返せば、on/offの間の値を表現できるんじゃね?っていう事。たぶん。 midiコントローラ作るんだから精度は必要だろ!っていう訳で、ここではtimer1を使う事にしましょう。 □タイマ割り込みの仕組み じゃあ、プログラム上ではタイマ割り込みはどうやって設定されるのかっつーと、「コールバック関数」っていう仕組みを使う。「コールバック関数って?」って言われると、今度は関数ポインタとかなんやら色々説明しなくちゃいけないので、詳細は「ぐぐって」欲しい。 ■Timer1を使う □前準備 Timer1はArduinoのplaygroundからダウンロードすることができます。 http://www.arduino.cc/playground/Code/Timer1 ダウンロードしたファイルはライブラリ用のディレクトリにコピーすれば使えます。詳しくは以下。 http://extend.ore.to/index.php?e=1348 □コーディング ・コールバックを設定 Timer1はそのまま「Timer1」っていうオブジェクトを使って処理を書く。オブジェクトはTimer1のヘッダファイルで宣言されています。 やりたいことは、bpmに合わせてmidiを出力するタイマ割り込みなので、それ用の関数を作ります。
あとは、これを関数setup()で設定してあげればOK
「Timer1.pwm(9, 512);」に関しては、すでにタイマ1を使ってるpwmに対して、制度を再設定する関数らしい。ただ、どれぐらいに下げればタイマ割り込みの制度がどの程度あがるのか、そもそもどの程度の影響があるのかは謎。それは別でまた調べてみたい。 ツイート Recent Entries from Same Category
|
コメント
|