NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

Arduino IDE(analogReadResolution関数の使い方)

■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);
}
イメージ 1
図1:プログラム例
 

 イメージ 1
図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から読み取られた余分な最下位ビットは破棄されます。

イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【ArduinoIDE reference】目次に戻る