// Піни для світлодіода і кнопки
const int ledPin = 5; // GPIO 5 для світлодіода
const int buttonPin = 4; // GPIO 4 для кнопки
// Змінні для зберігання часу
volatile unsigned long lastPressTime = 0;
volatile unsigned long previousTime = 0;
volatile unsigned long interval = 0;
volatile bool measureFinished = false;
const unsigned long debounceDelay = 200; // 200 мс для захисту від дребезгу
void IRAM_ATTR handleButtonPress() {
unsigned long currentPressTime = millis();
// Захист від дребезгу: перевіряємо чи пройшло більше 200 мс
if (currentPressTime - previousTime > debounceDelay) {
if (lastPressTime == 0) {
// Перше натискання
lastPressTime = currentPressTime;
} else {
// Друге натискання
interval = currentPressTime - lastPressTime;
lastPressTime = 0;
measureFinished = true;
}
previousTime = currentPressTime;
}
}
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP); // Внутрішній підтягуючий резистор для кнопки
// Налаштування переривання для кнопки
attachInterrupt(digitalPinToInterrupt(buttonPin), handleButtonPress, FALLING);
}
void loop() {
if (measureFinished) {
Serial.print("Інтервал між натисканнями: ");
Serial.print(interval);
Serial.println(" мс");
// Засвічуємо світлодіод на 1 секунду для індикації завершення
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
// Скидаємо змінну після виведення результатів
measureFinished = false;
}
}
Loading
esp32-devkit-c-v4
esp32-devkit-c-v4