3.LED呼吸灯
LED 呼吸灯(Breathing LED) 是一种模拟呼吸效果的灯光,它的亮度随着时间缓慢地和,形成类似呼吸的效果。相比传统的(亮灭状态切换),呼吸灯的变化更加平滑和自然,常用于(如 MacBook 休眠指示灯)
·
LED 呼吸灯(Breathing LED) 是一种模拟呼吸效果的灯光,它的亮度随着时间缓慢地 渐亮 和 渐暗,形成类似呼吸的效果。相比传统的 流水灯(亮灭状态切换),呼吸灯的变化更加平滑和自然,常用于电子产品的状态指示(如 MacBook 休眠指示灯)
1.呼吸灯基本原理
呼吸灯的核心原理是 PWM(脉宽调制,Pulse Width Modulation):
通过改变占空比(duty cycle)控制 LED 的亮度
占空比:高电平占一个周期信号的比例
占空比增大 → LED 亮度增加(渐亮)
占空比减小 → LED 亮度减少(渐暗)
ESP32中有16个PWM通道,分别对应编号0-15
2.单个呼吸灯代码展示
#include <Arduino.h>
#define d1 18
void init_port(){
ledcSetup(0,1000,10);
ledcAttachPin(d1,0);
}
void breathing_led(){
for(int i=0;i<1024;i++){
ledcWrite(0,i);
delay(1);
}
for(int i=0;i<1024;i++){
ledcWrite(0,1023-i);
delay(1);
}
}
void setup(){
init_port();
}
void loop(){
breathing_led();
}
3.代码解析
init_port():初始化PWM通道
ledcSetup(0,1000,10):
0:设置PWM通道0(0-15均可)
1000:频率1000Hz(1s有1000个周期的PWM信号)
10:分辨率10bit(亮度级别0-1023,每个周期的PWM信号分成1023等分,由此设置占空比)
ledcAttachPin(d1,0):
将引脚d1(即GPIO18)绑定到PWM0通道
breathing_led():呼吸灯效果
第一个for循环:led逐渐变亮
ledcWrite(0,i):控制PWM占空比,从而控制led亮度
delay(1):控制渐变速度
第二个for循环:led逐渐变暗
占空比由大到小即可
3.延伸思考
本例子是实现单个的呼吸灯效果,结合上讲的LED流水灯,思考一下:怎样实现四个“流水呼吸灯”,即四个灯按顺序“呼吸”?
4.延伸思考代码展示
#include <Arduino.h>
int pin[4]={14,16,17,18};
void init_port(){
for(int i=0;i<4;i=i+1){
ledcSetup(i,1000,10);
ledcAttachPin(pin[i],i);
}
}
void breathing_led(){
int i,j;
for(j=0;j<4;j=j+1){
for(i=0;i<1024;i=i+1){
ledcWrite(j,i);
delay(1);
}
for(i=0;i<1024;i=i+1){
ledcWrite(j,1023-i);
delay(1);
}
}
}
void setup() {
init_port();
}
void loop() {
breathing_led();
}
使用两层for循环,外层for循环用于遍历四个led,实现流水灯,内层循环实现呼吸灯
更多推荐



所有评论(0)