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を使用しているため、この関数を使うことはできません。