一、报错解释
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++) {// 输出 PWMledcWrite(CHANNEL, i);delay(10);}// 实现渐灭效果for (int i = pow(2, RESOLUTION) - 1; i >= 0; i--) {// 输出 PWMledcWrite(CHANNEL, i);delay(10);}
}
四、呼吸灯修改后的代码
#define FREQ 2000
#define RESOLUTION 8
#define LED 12void 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);}
}