Warning: Trying to access array offset on value of type bool in /home/cycos/cammy.co.jp/public_html/technical/wp-content/themes/cocoon-master/lib/utils.php on line 2604

Warning: Trying to access array offset on value of type bool in /home/cycos/cammy.co.jp/public_html/technical/wp-content/themes/cocoon-master/lib/utils.php on line 2604

Warning: Trying to access array offset on value of type bool in /home/cycos/cammy.co.jp/public_html/technical/wp-content/themes/cocoon-master/lib/utils.php on line 2632
スポンサーリンク

analogWriteResolution

スポンサーリンク
スポンサーリンク


analogWriteResolution()は、analogWrite()関数の高分解能を設定するための関数です。
AVRベースのボードとの下位互換性のために、デフォルトは8ビット(0〜255)です。

この関数は、DueのAnalogAPIに用意をされた専用関数です。
これ以外のボードでは使用することができません。

Dueは8ビットのPWM(他のボードと同じ)を12ピンと、12ビットのDAコンバータを2ピン持っています。この関数を使い12ビット指定すると、DACの分解能をフル活用でき、12ビット(0~4095)の出力が可能となり、PWMを使うときも符合が反転することがなくなります。

書き方 analogWriteResolution(設定するビット数)
戻り値 なし
引数 設定するビット数…1〜32
ボードのハードウェア機能よりも高いまたは低い解像度を選択した場合、analogWrite()で使用される値は、高すぎる場合は切り捨てられ、低すぎる場合はゼロが埋め込まれます。詳細については、以下の注意を参照してください。

プログラム例

void setup() {
  // open a serial connection
  Serial.begin(9600);
  // make our digital pin an output
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}

void loop() {
  // read the input on A0 and map it to a PWM pin
  // with an attached LED
  int sensorVal = analogRead(A0);
  Serial.print("Analog Read) : ");
  Serial.print(sensorVal);

  // the default PWM resolution
  analogWriteResolution(8);
  analogWrite(11, map(sensorVal, 0, 1023, 0, 255));
  Serial.print(" , 8-bit PWM value : ");
  Serial.print(map(sensorVal, 0, 1023, 0, 255));

  // change the PWM resolution to 12 bits
  // the full 12 bit resolution is only supported
  // on the Due
  analogWriteResolution(12);
  analogWrite(12, map(sensorVal, 0, 1023, 0, 4095));
  Serial.print(" , 12-bit PWM value : ");
  Serial.print(map(sensorVal, 0, 1023, 0, 4095));

  // change the PWM resolution to 4 bits
  analogWriteResolution(4);
  analogWrite(13, map(sensorVal, 0, 1023, 0, 15));
  Serial.print(", 4-bit PWM value : ");
  Serial.println(map(sensorVal, 0, 1023, 0, 15));

  delay(5);
}

注意

analogWriteResolution()ボードの機能よりも高い値に値を設定すると、Arduinoは余分なビットを切り捨てます。
例:analogWriteResolution(16)12ビットDACピンでDue withをanalogWrite()使用すると、渡された値の最初の12ビットのみが使用され、最後の4ビットは切り捨てられます。

analogWriteResolution()値をボードの機能よりも低い値に設定すると、ハードウェアに必要なサイズを満たすために、不足しているビットを0で埋めます。
例:12ビットDACピンでDue with analogWriteResolution(8)を使用すると、ArduinoはanalogWrite()必要な12ビットを取得するために使用される8ビット値に4つの0ビットを追加します。

弊社の二足歩行プログラミングロボットクムクムロボットは、ATMEGA32U4やESP32を使用しているため、この関数を使うことはできません。

タイトルとURLをコピーしました