analogWrite()

[アナログ入出力]

説明

アナログ電圧をピンに出力することができます(PWM wave).これは,LEDライトの明るさを変化させたり,モーターのスピードを変化させたりすることに使用できます.一度 analogWrite() を呼び出したら,次に analogWrite() を呼び出すまで,ピンに指定のデューティー比の方形波を生成し続けます(または analogWrite() や `analogWrite()`を同じピンに呼び出すまで). 多くのピンでのPWM信号の周波数は約490Hzです. Unoとそれに似たボードの5番と6番ピンの周波数は約980Hzです.

ほとんどのArduinoでは(ATmega168かATmega328を搭載しているもの),この関数は3,5,6,9,10,11番のピンで機能します.Arduino Megaでは,2~13番と44~46番のピンで機能します.ATmega8を搭載している昔のArduinoでは, analogWrite() の使用は9,10,11番ピンに限られます.
Arduino DUEでは,analogWrite() は2~13番ピンとDAC0,DAC1のピンでも使用することができます.PWMピンとは違い,DAC0とDAC1はD/A変換をしているので,これらのピンは真のアナログ出力として動作します.
analogWrite() を呼び出す前に, pinMode() で使用するピンを出力に設定する必要はありません.
analogWrite 関数はアナログピンや analogRead 関数とは無関係です.

構文

analogWrite(pin, value)

パラメータ

pin: 出力したいピン番号 使用可能なデータ型:int

value: デューティー比:0(常にオフ)から255(常にオン)まで.使用可能なデータ型:int

戻り値

なし

コード例

ポテンショメーターから読み取った値に比例したLED出力をします.

int ledPin = 9;      // LEDを9番のデジタルピンに接続する
int analogPin = 3;   // ポテンショメーターを3番のアナログピンに接続する
int val = 0;         // 読み取った値を格納する変数

void setup()
{
  pinMode(ledPin, OUTPUT);   // ピンを出力に設定する
}

void loop()
{
  val = analogRead(analogPin);   // 入力ピンを読み取る
  analogWrite(ledPin, val / 4);  // analogReadの値は0から1023まで,analogWriteの値は0から255まで
}

注意

5番と6番ピンで生成したPWM出力は,設定したデューティー比よりも高くなる場合があります. これは,PWM出力に使用している内部タイマーが,同じタイマーを使用する millis()delay() などの関数によって割り込まれるからです.これらは,低デューティー比の場合(0から10)のときに多く現れ,5番と6番ピンでデューティー比を0に設定しても完全にはオフにならない可能性があります.

参照

  • DEFINITION PWM