可変抵抗の使い方では、簡単な可変抵抗の使い方を書いたけど、この配線をして、AnalogRead()関数を使って値を取得すると、可変抵抗器に触っていない状態でも、値を取得するたびに結果が変わってしまう。 この現象は配線とかそういうのではなく、単にArduinoのアナログ取得とはそういうものらしい(アナログ取得そのものがそんなモノなのかも)。これは、たとえば、取得した値の上位nビットだけとるようにしたとしても回避することはできない(B000111とB001000の間で変化されたら、上位3ビットだけとっても値は動いてしまう)。 これに対する解決方の一つとして、「前回の値を覚えておいて、±1の変化を読み飛ばす」っていう方法がある。有効な分解能が1ビット分減ってしまうけど、1024分解能が512になるだけで、そんなに気にはならないと思う。 で、この処理、実際やってみてうまくいったんだけど、アナログポート一個一個にこういう処理をつけていくのは面倒なのでクラス化してみた。 □AnalogValue.LZHダウンロード 使い方は、「ライブラリの使い方」を参照のこと。 ■AnalogValue □アナログ入力を補助します。 ・入力のブレを補正します 通常、Arduinoにスライド抵抗を接続してanalogRead()で 電圧を測った場合、スライド抵抗に触っていない状態でも、 値が変化してしまいます。この状態を補正します。 スライド抵抗の状態をmidi出力に利用するとき等、±1の 変化で結果が変わってしまう場合に便利です。 ※±1の変化を読み飛ばす事で実現しています。このため、 分解能を1024めいいっぱいにして使用すると、スライド 抵抗で「1だけ値を増やす」等の微妙な操作ができなくなり ます。このため、AnalogValueは512分解能が限界となります。 ・2の乗数で分解能を指定可能です analogRead()で取得する値を、以下の値に設定することが できます。 0~511 0~255 0~127 0~063 0~031 0~015 0~007 ■関数 AnalogValue コンストラクタ readAnalogData アナログデータ取得 isChange 変化フラグ取得 resetFlag 変化フラグリセット ■使い方 1.コンストラクタで、値の範囲を指定します。 // 取得する値を0~127に設定します。 AnalogValue val(AV_RESOLUTION0128); 2.readAnalogData()で、読み取るポート番号を指定 // 12番ポートから取得 val.readAnalogData(); 3.結果は普通に代入・判定可能です // 結果が120以上なら if(120 <= val) { } ツイート Recent Entries from Same Category
|
コメント
|