可変抵抗との戦いが続きます。 可変抵抗は・・・っていうより、「アナログ入力は」かな。アナログ入力は、取得するタイミングで入力値が±2ぐらい値が変わってしまいます。つまり、ツマミは止まっているけど、取得する値が変化しちゃう。当然ですが、こればっかりはハード的にもうどうしようもないみたいです。 とはいえ、ダイアルで音階を制御しようとするなら、この挙動は致命的。ダイアルを動かしていないのに音階が変わっちゃったらイケナイよねー。 ってなんで、このアナログ入力のブレを、ソフトでなんとかしてみた。 ハードがどうしようもないことはソフトでなんとかするしかない。とりあえず、過去4回分の履歴をもって、それらの平均を取るって言う方法を採ってみた。これで、1回2回変わったぐらいじゃ値は変化しない。 ・・・・って思ったんだけど、これは失敗。ダイアルを途中で止めて見てみると、やっぱり数値が動いている。「4回の平均」を「8回の平均」に変えても同じ。うーん。こりゃたぶん16回とかにしても同じだろうね。「値が動いている」のは、一瞬だけブレるとかそういうのでは無く、「例えば今まで150だったものがある点から151に変わる」って事らしい。ちょっと弱った。普通にいろんな機材が解決していることなので、やり方は幾らでもあるはず。 小一時間、いや、もっとか。悩んだ結果として、「4回の平均」にプラスして、微細な変化を読み捨てる事にした。簡単に言うと、「±1は誤差として変化と見なさない」。ダイアルを2以上動かさないと変化を検出しない事になるけど、考えてみたら1024とかいう分解能持ってるんだから、それぐらいどうって事無いなーって思った。これで安定化。 ここまでの処理は全部クラス化してあるので、基本的にはint変数と同じように代入・参照が出来る。
ポインタを使っての変更は、クラス内部で代入が管理できないので不可。っていうか、その使い方はレアだろう。 #9月以降はArduino関連はお休みします。M3に向けてCDを作らなくちゃいけないので。 ツイート Recent Entries from Same Category
|
コメント
|