説明
指定されたアナログピンからアナログ値(PWM)を出力します。
この機能によって、LEDの輝度を変えたり、モーターの駆動速度をコントロールすることができます。
analogWrite関数が実行されると、次にanalogWriteやdigitalRead、digitalWriteなどがそのピンに対して使用されるまで、安定した矩形波が出力されます。
書き方 | analogWrite(ピン番号,アナログ値) |
戻り値 | 無し |
引数 | ピン番号(uint8_t)… ピン番号 アナログ値(int)…0(常にオフ)から255(常にオン)の間のデューティー比 |
ボード別PWMピンと周波数
ボード | PWMピン | PWM周波数 |
---|---|---|
Uno, Nano, Mini | 3, 5, 6, 9, 10, 11 | 490 Hz (pins 5 and 6: 980 Hz) |
Mega | 2 – 13, 44 – 46 | 490 Hz (pins 4 and 13: 980 Hz) |
Leonardo, Micro, Yún | 3, 5, 6, 9, 10, 11, 13 | 490 Hz (pins 3 and 11: 980 Hz) |
Uno WiFi Rev2, Nano Every | 3, 5, 6, 9, 10 | 976 Hz |
MKR boards * | 0 – 8, 10, A3, A4 | 732 Hz |
MKR1000 WiFi * | 0 – 8, 10, 11, A3, A4 | 732 Hz |
Zero * | 3 – 13, A0, A1 | 732 Hz |
Nano 33 IoT * | 2, 3, 5, 6, 9 – 12, A2, A3, A5 | 732 Hz |
Nano 33 BLE/BLE Sense | 1 – 13, A0 – A7 | 500 Hz |
Due ** | 2-13 | 1000 Hz |
101 | 3, 5, 6, 9 | pins 3 and 9: 90 Hz, pins 5 and 6: 980 Hz |
※ MKRとNano33 IoT、Zeroボードでは、AC0(A0)ピンに対してanalogWrite()を利用で真のアナログ出力を行うことができます。
※ Dueボードでは、DAC0とDAC1ピンに対してanalogWrite()を利用することで真のアナログ出力を行うことができる。
※analogWrite()を呼び出す前にpinMode()を利用してピンの設定を行う必要はありません。
プログラム例
可変抵抗を回すとその値に応じてLEDの輝度を変えるプログラム
int ledPin = 9; // LED connected to digital pin 9 int analogPin = A0; // potentiometer connected to analog pin 3 int val = 0; // variable to store the read value void setup() { pinMode(ledPin, OUTPUT); // sets the pin as output } void loop() { val = analogRead(analogPin); // read the input pin analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255 }
注意
ピン5と6で生成されたPWM出力は、も高いデューティサイクルを持ちます。
これは、これらのPWM出力の生成に使用されるのと同じ内部タイマーmillis()
およびdelay()
関数との相互作用によるものです。
これは、例えば、低デューティサイクル設定(たとえば0〜10)で使用するとき、5番ピン6番ピンに0に設定しても出力が完全にオフにならない可能性があります。