日本語が、大好きです。(Sorry, Japanese Only.)
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
<< 2024 November >>

no fun nolife
NEW ENTRIES
RECENT COMMENTS
CATEGORIES
rss
 はてなアンテナに追加
 はてなRSSに登録
 Bloglinesで閲読登録
 Subscribe with livedoor Reader
 Add to Google
 My Yahoo!に追加
LINK
ARCHIVES
music
LOGIN
現在のモード: ゲストモード
USER ID:
PASS:
logout

 可変抵抗との戦いが続きます。

 可変抵抗は・・・っていうより、「アナログ入力は」かな。アナログ入力は、取得するタイミングで入力値が±2ぐらい値が変わってしまいます。つまり、ツマミは止まっているけど、取得する値が変化しちゃう。当然ですが、こればっかりはハード的にもうどうしようもないみたいです。

 とはいえ、ダイアルで音階を制御しようとするなら、この挙動は致命的。ダイアルを動かしていないのに音階が変わっちゃったらイケナイよねー。


 ってなんで、このアナログ入力のブレを、ソフトでなんとかしてみた。


 ハードがどうしようもないことはソフトでなんとかするしかない。とりあえず、過去4回分の履歴をもって、それらの平均を取るって言う方法を採ってみた。これで、1回2回変わったぐらいじゃ値は変化しない。

 ・・・・って思ったんだけど、これは失敗。ダイアルを途中で止めて見てみると、やっぱり数値が動いている。「4回の平均」を「8回の平均」に変えても同じ。うーん。こりゃたぶん16回とかにしても同じだろうね。「値が動いている」のは、一瞬だけブレるとかそういうのでは無く、「例えば今まで150だったものがある点から151に変わる」って事らしい。ちょっと弱った。普通にいろんな機材が解決していることなので、やり方は幾らでもあるはず。

 小一時間、いや、もっとか。悩んだ結果として、「4回の平均」にプラスして、微細な変化を読み捨てる事にした。簡単に言うと、「±1は誤差として変化と見なさない」。ダイアルを2以上動かさないと変化を検出しない事になるけど、考えてみたら1024とかいう分解能持ってるんだから、それぐらいどうって事無いなーって思った。これで安定化。

 ここまでの処理は全部クラス化してあるので、基本的にはint変数と同じように代入・参照が出来る。


#include <AnalogValue>
AnalogValue val;

void setup()
{
}

void loop()
{
val = analogRead(0); // こんなかんじ
delay(300);
}



ポインタを使っての変更は、クラス内部で代入が管理できないので不可。っていうか、その使い方はレアだろう。


#9月以降はArduino関連はお休みします。M3に向けてCDを作らなくちゃいけないので。


Recent Entries from Same Category









    
処理時間 0.648953秒