Arduino 日本語リファレンス


analogWrite(pin, value)

原文

指定したピンからアナログ値(PWM波)を出力します。LEDの明るさを変えたいときや、モータの回転スピードを調整したいときに使えます。

analogWrite関数が実行されると、次にanalogWriteやdigitalRead、digitalWriteなどがそのピンに対して使用されるまで、安定した矩形波が出力されます。PWM信号の周波数は約490Hzです。ただし、Unoの5、6番ポートとLeonardoの3、11番ピンは約980Hzで出力します。

UnoのようにATmega328Pを搭載しているArduinoボードでは、デジタルピン3、5、6、9、10、11でこの機能が使えます。Leonardoはデジタルピン13もPWM対応です。

analogWrite()の前にpinMode()を呼び出してピンを出力に設定する必要はありません。

Arduino Dueはピン2〜13に加えて、DAC0とDAC1というピンをサポートしています。この2つのピンは、PWMではなく、DA(Digital to Analog)アナログコンバータによる真のアナログ出力として機能します。

【パラメータ】

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]