用户工具

站点工具


reference:language:analogwrite

差别

这里会显示出您选择的修订版和当前版本之间的差别。


前一修订版
reference:language:analogwrite [2023/06/07 04:23] (当前版本) – 外部编辑 127.0.0.1
行 1: 行 1:
 +====== analogWrite() ======
 +
 +
 +===== 描述 =====
 +
 +从一个引脚输出模拟值(PWM)。可用于让LED以不同的亮度点亮或驱动电机以不同的速度旋转。analogWrite()输出结束后,该引脚将产生一个稳定的特殊占空比方波,直到下次调用analogWrite()(或在同一引脚调用digitalRead()或digitalWrite())。PWM信号的频率大约是490赫兹。
 +
 +在大多数ocrobot控制板(ATmega168或ATmega328),只有引脚3,5,6,9,10和11可以实现该功能。在Mega2560上,引脚2到13可以实现该功能。在使用analogWrite()前,你不需要调用pinMode()来设置引脚为输出引脚。
 +
 +analogWrite函数与模拟引脚、analogRead函数没有直接关系。
 +
 +===== 语法 =====
 +
 +analogWrite(pin,value)
 +
 +===== 参数 =====
 +
 +pin:用于输入数值的引脚。
 +\\ value:占空比:0(完全关闭)到255(完全打开)之间。
 +
 +===== 返回 =====
 +
 +
 +
 +===== 说明和已知问题 =====
 +
 +引脚5和6的PWM输出将高于预期的占空比(输出的数值偏高)。这是因为millis()和delay()功能,和PWM输出共享相同的内部定时器。这将导致大多时候处于低占空比状态(如:0  -  10),并可能导致在数值为0时,没有完全关闭引脚5和6。
 +
 +===== 例子 =====
 +
 +通过读取电位器的阻值控制LED的亮度
 +<code cpp>
 +int ledPin = 10;  // LED连接到数字引脚9
 +int analogPin = 0;  //电位器连接到模拟引脚3
 +int val = 0;  //定义变量存以储读值
 +
 +void setup()
 +{
 +pinMode (ledPin,OUTPUT);  //设置引脚为输出引脚
 +}
 +
 +void loop()
 +{
 +val = analogRead (analogPin);  //从输入引脚读取数值
 +analogWrite(ledPin,val / 4);  // 以val / 4的数值点亮LED(因为analogRead读取的数值从0到1023,而analogWrite输出的数值从0到255)
 +}
 +</code>
 +