analogReadResolution

動作

analogRead関数の分解能(ビット数)を設定します。

分解能(ビット数)」とは、analogRead関数が読み取る値の細かさです。

analogRead関数はデフォルトで10ビット(0〜1023の1024段階)の分解能です。これはAVRマイコン搭載ボード(Arduino Uno R3Arduino Nanoなど)との互換性のためです(一番低い性能のボードに合わせています)。

Arduino Uno R4Arduino ZeroRaspberry Pi Picoなどのボードでは、ハードウェア(ADCモジュール)が10ビットより高い分解能に対応しています。ここで説明するanalogReadResolution関数を使用すると、これらのボードのハードウェア性能をフルに活用できます。

例えば、5V動作のArduino Uno R4では、デフォルトの10ビットでは0Vのとき「0」、5Vのとき「1023」という数値で読み取ります。このとき1ステップの電圧は約4.89mV(5V÷1023)です。

analogReadResolution関数で12ビットに変更すると、0Vのとき「0」、5Vのとき「4095」という数値で読み取るようになり、1ステップの電圧は約1.22mV(5V÷4095)になります。同じ電圧範囲を、より細かい数値で読み取ることができます。

注意

analogReadResolution関数で分解能を高くしても、実際にはその精度で読み取れるとは限りません。

例えばArduino Uno R4の最大分解能は14ビットですが、analogReadResolution関数で16ビットに設定すると、analogRead関数の読み取り範囲は0〜65535(16ビット)になるものの、実際の精度は14ビットのままです。具体的には0〜65535(16ビット)の範囲を16386段階(14ビット)で読み取っています。詳しくは補足セクションをご参照ください。

また、Arduino Uno R3などのAVRマイコン搭載ボードでは、この関数自体が使用できません(コンパイルエラーになります)。具体的には「補足」セクションの対応表をご参照ください。

補足

analogReadResolution関数はanalogRead関数の動作にのみ影響します。analogWrite関数の分解能を変更する場合は、analogWriteResolution関数を使用します。

書式

analogReadResolution(bits);
引数bits分解能をビット数で指定します。1〜32の整数値を指定します。

※Arduinoボードがサポートしている分解能より高い分解能を指定できますが、その場合analogRead関数の戻り値はそのボードの最高分解能の精度になります。またボードごとに制約などもあります。詳しくは補足セクションを参照ください。
戻り値なし

主な分解能の読み取り値の範囲は次のようになります。

ビット数読み取り範囲
80 〜 255
100 〜 1023
120 〜 4095
140 〜 16383
160 〜 65535

主な用途

  • 10ビットより高い分解能のADCを搭載したボード(Arduino Uno R4など)の性能をフルに活用して、電圧を細かく読み取りたい場合
  • analogWrite関数と分解能を揃えて、読み取り値をそのまま出力に渡したい場合
  • 逆に分解能を下げて、値を一定範囲内(0〜255 など)に変更したい場合

使用例

次のコードにより、analogRead関数で読み取る値の分解能を変更することができます。

analogReadResolution(10);  // 10ビット(0〜1023)に設定(デフォルト)
analogReadResolution(8);   // 8ビット(0〜255)に設定(デフォルトより低く設定)
analogReadResolution(14);  // 14ビット(0〜16383)に設定(デフォルトより高く設定)

サンプルスケッチ

analogReadResolution関数は一部のボードでは動作しませんので、サンプルスケッチではESP32を使用しています。

33番ピンに接続したボリューム(可変抵抗)の電圧を、2ビットと8ビットの両方の分解能で読み取り、シリアルモニタで比較するスケッチ例です(分解能は違いをわかりやすくするために極端な例にしていますので実用性は微妙ですが…)。同じ電圧でも分解能によって読み取り値の細かさが変わることを確認できます。

シミュレーターの動作を開始すると右下にシリアルモニタが表示されます。ボリュームのつまみを動かすとanalogRead関数で読み取った値が変化します。少しずつ動かしたとき、2ビットと8ビットでは細かさに違いがあることがわかります。

ボタンをクリックするとシミュレーターが動作します。スケッチを変更することもできます。変更した場合、シミュレーションを一度 ボタンをクリックして停止してから再度シミュレーターを開始してください。