analogWrite()

Last revision:2025/05/10

名称

analogWrite()

説明

アナログ値(PWM波)をピンに書き込む。LEDの明るさやモーターのスピードを変えることができる。analogWrite()を呼び出した後、指定したデューティー比の安定した方形波(矩形波)がピンに出力される。同じピンに対してanalogWrite()もしくは、digitalRead()digitalWrite()を発行するまで、その方形波は出力され続ける。

どのピンが公式にサポートされているPWMピンなのかを知るには、ボードのピンアウトを確認すること。いくつかのボードでは、PWMを利用可能な追加のピンがある。これらのピンの使用は、タイマーの利用や他のピンとの潜在的な競合を考慮できる上級者にだけ推奨される。

PWM機能に加え、いくつかのボードでは、DACと記されているピンでanalogWrite()使用すると、本物のアナログ出力を行うことができる。DACが利用可能かは、ボードのピンアウトを確認すること。

i
同時に利用できるのは4本のピンまでである。4ピンを超えるPWMを有効にすると、スケッチの実行が中断され、新しいスケッチを再度アップロードし、ボードをリセットすることが求められる。

analogWrite()を呼び出す前にpinMode()を利用してピンの設定を行う必要はない。

analogWrite()関数は、アナログピンやanalogRead()関数とは何の関連もない。

書式

指定したピンにPWM信号を生成するには、以下の関数を使う。

analogWrite(pin, value)

C言語シグネチャ(avr)

void analogWrite(uint8_t pin, int val);

引数

この関数は以下の引数を受け付ける。

pin書き込みに利用するピン。データ型: int
value0(常にオフ)から255(常にオン)の間のデューティー比。データ型: int

戻り値

なし。

コード例

ポテンショメーター(A3に接続)から読み取った値に応じて、LEDへの出力を設定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
int ledPin = 9;      // LED connected to digital pin 9
int analogPin = A3;   // potentiometer connected to analog pin 3 (A3)
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)に特に注意が必要で、デューティー比を0にしても、5番ピンと6番ピンでは、完全に出力を0にすることはできない。

参照

訳者註

PWMをサポートしないピンに対して、analogWrite()を実行した場合は、valが128未満のときにはLOW、128以上のときにはHIGHが出力されます。

オリジナルのページ

https://docs.arduino.cc/language-reference/en/functions/analog-io/analogWrite/

実装の解析

analogWrite()

最終更新日

July 12, 2026

inserted by FC2 system