来做一下ESP32的PWM调速
ESP32有16口可以做PWM调速,0-15
然后要选PWM的信号频率控LED,5000Hz。
LED亮度调节用8位精度。也就是0-255来调节。
最后选定针脚来工作,命令如下:
ledcAttachPin(GPIO, channel)
控制亮度用另一个函数
ledcWrite(channel, dutycycle)
举个例,我用一个16脚来控制LED。
那程序如下:
// Done by gada888
//设定LED脚
const int ledPin = 16; // 16 = GPIO16
// 设PWM参数
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
void setup(){
// 设LED PWM 功能
ledcSetup(ledChannel, freq, resolution);
// 指定选的GPIO位LED控制脚
ledcAttachPin(ledPin, ledChannel);
}
void loop(){
// 调亮
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// PWM调节
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
// 调暗
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// PWM调节
ledcWrite(ledChannel, dutyCycle);
delay(15);缓冲
}
}
同样道理,可以一次调好几个灯
//done by gada888
// 设定LED 脚
const int ledPin = 16; // 16=GPIO16
const int ledPin2 = 17; // 17=GPIO17
const int ledPin3 = 5; // 5=GPIO5
// 设PWM参数
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
void setup(){
// 设定LED调速功能
ledcSetup(ledChannel, freq, resolution);
//指定要干活的GPIO
ledcAttachPin(ledPin, ledChannel);
ledcAttachPin(ledPin2, ledChannel);
ledcAttachPin(ledPin3, ledChannel);
}
void loop(){
// 调亮
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// PWM调速
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
// 调暗
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// PWM 调速
ledcWrite(ledChannel, dutyCycle);
delay(15);缓冲
}
}
请问,能不能一次调的三个灯都是不同的频率呢? 佳佳Julie 发表于 2021-11-27 22:49
请问,能不能一次调的三个灯都是不同的频率呢?
我知道了,在channel那里设置不同的号数就可以了
页:
[1]