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