const int led = 5;
const int button[] = {34,39,45};
const int count = 3;//按钮数量
int buttonstates = 0;//按钮状态
int step1=1;//控制呼吸灯由亮到灭在由灭到亮
int step = 0;//pwm频率步长
int counts = 0;//亮度值
void setup() {
Serial.begin(115200);
Serial.println("Hello, ESP32-S2!");
pinMode(led, OUTPUT);
for (int i = 0; i < count; i++){
pinMode(button[i], INPUT_PULLUP);
}
}
void loop() {
for(int i = 0; i < count; i++){
int buttonstate = digitalRead(button[i]);//读取按钮是否按下
if (buttonstate == LOW){
buttonstates |= (1 << i); // 更新按钮状态
} else {
buttonstates &= ~(1 << i); // 如果按钮未被按下,清除对应的位
}
}
// 检查按钮状态并控制LED以不同频率闪烁
if (buttonstates != 0){
if (buttonstates == 1) { // 第一个按钮被按下
step = 10; // 以100毫秒的间隔闪烁
} else if (buttonstates == 2) { // 第二个按钮被按下
step = 20; // 以200毫秒的间隔闪烁
} else if (buttonstates == 4) { // 第三个按钮被按下
step = 30; // 以300毫秒的间隔闪烁
}
liang(step);
} else {
digitalWrite(led, LOW); // 如果没有按钮被按下,关闭LED
}
}
void liang (int step) {
analogWrite(led, counts);//将一个模拟信号输出到引脚,0到255之间的PWM频率值, 0对应off, 255对应on
counts += step*step1;//亮度每次增加
if(counts <=0 || counts >= 255){
step1 = -step1;
}
delay(20);//延时
}
Loading
esp32-s2-devkitm-1
esp32-s2-devkitm-1