codeFlowType:
codeWrite
codeFlowLang:
C++
Подавите дребезг контакта кнопки. Для этого запомните время , когда вызывалось прерывание, и при последующем вызове, если не прошло 100 мм, не переключайтесь светодиод
Конечно! Ниже представлен пример кода на C++, который позволяет подавить дребезг контакта кнопки. Мы запоминаем время последнего срабатывания прерывания и проверяем, прошло ли 100 мс перед выполнением переключения светодиода.
#include <Arduino.h>
const int buttonPin = 2; // Номер пина кнопки
const int ledPin = 13; // Номер пина светодиода
volatile unsigned long lastDebounceTime = 0; // Время последнего срабатывания
const unsigned long debounceDelay = 100; // Задержка в миллисекундах
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // Настройка пина кнопки
pinMode(ledPin, OUTPUT); // Настройка пина светодиода
attachInterrupt(digitalPinToInterrupt(buttonPin), buttonPress, FALLING); // Настройка прерывания
}
void loop() {
// Основной цикл остается пустым, всё происходит в прерывании
}
void buttonPress() {
unsigned long currentMillis = millis(); // Получаем текущее время в миллисекундах
// Проверяем, прошло ли достаточно времени
if (currentMillis - lastDebounceTime > debounceDelay) {
// Переключаем состояние светодиода
digitalWrite(ledPin, !digitalRead(ledPin));
// Обновляем время последнего срабатывания
lastDebounceTime = currentMillis;
}
}
Этот код будет работать на платах Arduino и позволяет избежать проблем с дребезгом контактов при нажатии кнопки.