analogWrite(pin, value)原文指定したピンからアナログ値(PWM波)を出力します。LEDの明るさを変えたいときや、モータの回転スピードを調整したいときに使えます。analogWrite関数が実行されると、次にanalogWriteやdigitalRead、digitalWriteなどがそのピンに対して使用されるまで、安定した矩形波が出力されます。 Arduino UnoのPWM信号の周波数は約490Hzです。ただし、5、6番ポートは約980Hzで出力します。この周波数はボードによって異なります。UnoのようにATmega328Pを搭載しているArduinoボードでは、デジタルピン3、5、6、9、10、11でこの機能が使えます。 MKRファミリーのようにDAコンバータ(DAはdigital to analogの略)を搭載しているボードは、PWMではなく指定した電圧の直流を出力することが可能です。たとえば、Arduino MKR WiFi 1010の場合、A0ピンを指定するとDAコンバータから出力されます。 analogWriteの前にpinMode関数を呼び出して出力に設定する必要はありません。 【パラメータ】 pin: 出力に使うピンの番号 value: デューティ比(0から255) valueに0を指定すると、0Vの電圧が出力され、255を指定すると5Vが出力されます。ただし、これは電源電圧が5ボルトの場合で、3.3Vの電源を使用するボードでは3.3Vが出力されます。つまり、出力電圧の最大値は電源電圧と同じです。 【戻り値】 なし 【例】 ポテンショメータの状態に応じて、LEDの明るさを変えます。 int ledPin = 9; // LEDはピン9に接続 int analogPin = 3; // アナログピン3にポテンショメータ int val = 0; void setup() { } void loop() { val = analogRead(analogPin); // 得たアナログ値を1/4して、0-1023の値を0-255に変換 analogWrite(ledPin, val / 4); } 【注意】 ピン5と6のPWM出力はデューティ比が高めになります。これはPWM出力に使う内蔵タイマを、millis()やdelay()といった関数でも利用していることが原因です。注意が必要なのはディーティ比を低くして使うときで(例えば0〜10)、仮にパラメータを0に設定しても、ピン5と6の出力は完全にはオフにならないかもしれません。 [目次へ戻る] |
Creative Commons Attribution-ShareAlike 3.0 License.
このドキュメントはArduino Teamにより執筆され、Takumi Funadaが翻訳し、一部加筆修正したものです
ご意見はtf at musashinodenpa.comまでお送りください [Arduino wiki]