■analogReadResolution関数
analogReadResolution関数は、Arduino DueとZeroのためのアナログAPIの拡張です。
analogRead関数が返す値のサイズをビット単位で設定します。
AVRベースのボードとの下位互換性が有る為、デフォルトで10ビット(0〜1023)の値を戻します。
DueとZeroには、解像度を12に変更することでアクセスできる12ビットADC機能があります。
これはanalogRead関数から0〜4095の間の値を返します。
■使用例
ArduinoIDEで使用するanalogReadResolution関数の使い方は以下の通りです。
試しにこのプログラムをGenuino101で実行すると、analogReadResolution関数によってanalogRead関数が返す値を10,12,16ビットに変更します。
この状態でオープンにしたA0ピンに掛かっている電圧を読取りシリアルモニター上に一秒間隔で図2の通り表示します。
void setup() { // シリアル接続を開く Serial.begin(9600); } void loop() { // デフォルト解像度(10ビット)でA0の入力を読み取りシリアル出力する analogReadResolution(10); Serial.print("ADC 10-bit (default) : "); Serial.print(analogRead(A0)); // A0ピンの解像度を12ビットに変更 analogReadResolution(12); Serial.print(", 12-bit : "); Serial.print(analogRead(A0)); // A0ピンの解像度を16ビットに変更 analogReadResolution(16); Serial.print(", 16-bit : "); Serial.print(analogRead(A0)); // A0ピンの解像度を8ビットに変更 analogReadResolution(8); Serial.print(", 8-bit : "); Serial.println(analogRead(A0)); // シリアルモニターの更新速度を抑える delay(1000); }
図2:プログラム実行結果
■構文
analogReadResolution(bits)
■パラメータ
bits:analogRead関数が返す値の解像度(ビット数)を指定します。
これは1~32に設定することが出来ます。
解像度を12以上に設定する事が出来ますが、analogRead関数で返される値は近似値となります。
■戻り値
有りません
■補足
analogReadResolution関数の設定値を、使用するボードの能力を超えて高い値に設定すると、Arduinoは搭載するADコンバータの最高解像度を超えた部分をパディング※1し余分なビットでは「0」を返します。
これは、将来的により高解像度のADコンバータを搭載したボードを使用する場合において、16ビットの解像度(または実際のハードウェア機能よりも高い解像度)を設定しておけば、コードを変更せずに新ボードへスケッチを移行出来る様になる利点が有ります。
※1:パディングとは、指定した桁数に満たない部分をゼロで埋める事
例1)DueまたはZeroで「analogReadResolution(16)」を使用する
実際のADCの読み込みを含む最初の12ビットとゼロで埋められた最後の4ビットで近似された16ビット数が得られます。
例2) analogReadResolution関数の値をボードの能力より低い値に設定する
ADCから読み取られた余分な最下位ビットは破棄されます。