/*
Добавил определение пина подключения кнопки и количества требуемых
нажатий для включения через define для удобства внесения изменений в случае
переработки схемы подключения.
С помощью millis организовал задержку считывания положения кнопки
для устранения ложных срабатываний (дребезга контактов)
К сожалению в онлайн симуляторе у меня этот код не запускается.
Но он отлично запускается в симуляторе в VSCode и на реальном устройстве.
*/
#include <Arduino.h>
#define LED_PIN 39 // Пин подключения светодиода
#define BTN_PIN 18 // Пин подключения кнопки
#define COUNT 3 // Количество нажатий кнопки для включения светодиода
bool light_on = false; // Флаг включения светодиода
bool btn_down = false; // Флаг нажатия кнопки
unsigned long btn_time = 0; // Время нажатия кнопки
int count = 0; // Счетчик количества нажатий
void setup() {
// Настраиваем пин подключения светодиода
pinMode(LED_PIN, OUTPUT);
pinMode(BTN_PIN, INPUT);
Serial.begin(9600);
}
void loop() {
// Проверяем, нажата ли кнопка
if(digitalRead(BTN_PIN) == HIGH){
if(btn_time + 300 < millis()){ // Тут предотвращаем ложные срабатывания из-за дребезга контактов кнопки
btn_time = millis();
if(!btn_down){
btn_down = true;
count +=1;
if(count == COUNT){
count = 0;
light_on = true;
}
}
}
}else{
btn_down = false;
}
/*
Далее код включения светодиода без модификаций.
При необходимости не останавливать выполнение программы командой delay,
можно так же применить внутренний таймер используя millis
*/
if(light_on == true){
light_on = false;
digitalWrite(LED_PIN, HIGH);
delay(1000);
}else{
digitalWrite(LED_PIN, LOW);
}
}
Loading
esp32-s3-devkitc-1
esp32-s3-devkitc-1