模拟输出

将模拟值(PWM 波)输出到管脚。可用于在不同的光线亮度调节发
光二极管亮度或以不同的速度驱动马达。调用 analogWrite()后,该 引脚将产生一个指定占空比的稳定方波,直到下一次调用analogWrite()(或在同一引脚调用 digitalRead()或digitalWrite())。 PWM 的信号频率约为 490 赫兹。

在大多数 Arduino 板(带有 ATmega168 或 ATmega328),这个函
数工作在引脚 3,5,6,9,10 和 11。在 ArduinoMega,它适用于2-13 号引脚。老的带有 ATmega8 的 Arduino 板只支持 9,10,11引脚上使用。你并不需要在调用 analogWrite()之前为设置输入引脚 而调用 pinMode()。

这个 analogWrite 方法与模拟引脚或者 analogRead 方法毫不相干

当使用analogWrite()函数,制定引脚通过高低电平的不断转换来输出一个周期固定(约490Hz)的方波,通过改变高低电平在每个周期所占的比例(占空比),得到近似输出不同电压的效果。

占空比

语法

ananlogWrite(pin,value)

参数

pin:输出引脚号

value:PWM脉冲宽度(占用空):0(常关)~255(常开)

返回值

备注

引脚 5 和 6 的 PWM 输出将产生高于预期的占空比。这是因为millis()和 delay()函数,它们共享同一个内部定时器用于产生 PWM 输出所产生的相互作用。这提醒我们引脚 5 和 6 在多数低占空比的设置(如0- 10)的情况下 0 数值的结果并没有完全关闭。

范例

将输出设置为与从电位器读取的值成比例的LED。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int ledPin = 9; // 连接数字引脚9的LED
int analogPin = 3; // 电位器连接到模拟引脚3
int val = 0; // 变量以存储读取值

void setup()
{
pinMode(ledPin, OUTPUT); // 将引脚设置为输出
}

void loop()
{
val = analogRead(analogPin); // 读取输入引脚
analogWrite(ledPin, val / 4); //模拟读取值从0到1023,模拟写取值从0到255
}