Loading...

Reference   Language | Libraries | Comparison | Changes

analogWrite()

Description

向针脚写入一个逻辑值 (PWM wave). 可以用来点亮LED灯,调整其亮度或者驱动一个电机,控制其转速. 调用analogWrite()函数后, 对应的针脚会输出一个稳定的,指定占空比的方波.(在这个针脚下一次调用analogWrite() ,或者调用digitalRead()或者 digitalWrite(),针脚的输出会改变为相应的函数执行), PWM信号的频率近乎于490Hz.

在大多数的Arduino板上(MCU为 ATmega168 or ATmega328), 函数起作用的针脚为 3, 5, 6, 9, 10, 和 11. 在 Arduino Mega板上, 起作用的针脚为 2 到 13. 老一点的Arduino 板,MCU是 ATmega8 的,analogWrite()只支持针脚9, 10, and 11. 在执行analogWrite()之前,不需要调用pinMode()函数把针脚设置成输出模式.

analogWrite函数和模拟量采集针脚, analogRead 函数毫无关系.

语法

analogWrite(pin, value)

参数

pin:需要操作的针脚.

value: 占空比: 从 0 (off) 到 255 (on).

返回值

无返回值

一些说明和已知的问题

针脚5和6上的PWM输出,占空比往往高于期望值.这是由于millis()和delay()函数的相互作用,会占用内部计时器,使内部计时器在处理PWM输出时分心. This is because of interactions with the millis() and delay() functions, which share the same internal timer used to generate those PWM outputs.这种情况一般出现在低占空比设置时,(比如 0 - 10) ,还有些情况是占空比为0时,针脚5和6并没有关闭输出.

例子

读取电位器的值,并按比例点亮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);  // 模拟量值为 0 到 1023, analogWrite 输出量值范围是 0 到 255
}

See also

Reference Home

Corrections, suggestions, and new documentation should be posted to the Forum.

The text of the Arduino reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.