日本語が、大好きです。(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


 可変抵抗の使い方では、簡単な可変抵抗の使い方を書いたけど、この配線をして、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









    
処理時間 0.69601秒