reference:language:analogwrite
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的亮度
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) }
串口9600波特率输入0-255数字控制D6引脚PWM输出
const int pwmPin = 6; // 使用D6引脚输出PWM
void setup() {
pinMode(pwmPin, OUTPUT); // 设置引脚为输出模式
Serial.begin(9600); // 初始化串口通信
Serial.println("输入0-255之间的值来设置PWM占空比:");
}
void loop() {
while (Serial.available() > 0) {
int dutyCycle = Serial.parseInt(); // 读取串口输入的数值
Serial.read(); // 清除缓冲区
// 确保输入值在有效范围内
if (dutyCycle >= 0 && dutyCycle <= 255) {
analogWrite(pwmPin, dutyCycle); // 设置PWM占空比
Serial.print("PWM占空比设置为: ");
Serial.println(dutyCycle);
} else {
Serial.println("无效输入! 请输入0-255之间的值");
}
}
}
reference/language/analogwrite.txt · 最后更改: 2025/10/11 02:55 由 127.0.0.1
