一、报错解释
ledcsetup()和ledcattachpin()已经在3.0 arduino.h移除了
二、解决办法
使用ledcAttach:设置 LEDC 引脚的给定频率和分辨率。LEDC 通道将自动选择。
bool ledcAttach(uint8_t pin, uint32_t freq, uint8_t resolution);
/*
·pin选择 LEDC 引脚。
·freq选择 pwm 的频率。
·resolution选择LEDC通道的分辨率。范围是 1-14 位(ESP32 为 1-20 位)。
·true如果配置成功,此函数将返回。如果false返回,则发生错误,LEDC 通道未配置。
*/
使用ledcWrite:设置 LEDC 引脚的占空比
bool ledcWrite(uint8_t pin, uint32_t duty);
/*
·pin选择 LEDC 引脚。
·duty选择要为选定的 LEDC 引脚设置的占空比。
·true如果设置占空比成功,此函数将返回。如果false返回,则发生错误,并且未设置占空比。
*/
三、呼吸灯PWM原代码
#define FREQ 2000 // 频率
#define CHANNEL 0 // 通道
#define RESOLUTION 8 // 分辨率
#define LED 12 // LED 引脚
void setup() {
// 设置通道
ledcSetup(CHANNEL, FREQ, RESOLUTION);
// 绑定通道号与引脚
ledcAttachPin(LED, CHANNEL);
}
void loop() {
// 实现渐亮效果
for (int i = 0; i < pow(2, RESOLUTION); i++) {
// 输出 PWM
ledcWrite(CHANNEL, i);
delay(10);
}
// 实现渐灭效果
for (int i = pow(2, RESOLUTION) - 1; i >= 0; i--) {
// 输出 PWM
ledcWrite(CHANNEL, i);
delay(10);
}
}
四、呼吸灯修改后的代码
#define FREQ 2000
#define RESOLUTION 8
#define LED 12
void setup() {
// put your setup code here, to run once:
ledcAttach(LED, FREQ, RESOLUTION);
}
void loop() {
// put your main code here, to run repeatedly:
for(int i=0;i<pow(2,RESOLUTION);i++){
ledcWrite(LED, i);
delay(10);
}
for(int i=pow(2,RESOLUTION);i>=0;i--){
ledcWrite(LED, i);
delay(10);
}
}