/
nkarbofos
/
PressAutomation
Обзор
Документация
Войти
/
nkarbofos
/
PressAutomation
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
code/PressAutomationCode/src/interrupts.cpp
81 строка
2 KB
Nikita
fix: minor fixes, added params to display
25 июн 2026, 13:58
25 июн 2026, 13:58
ab77611
Код
Авторство
О чём код?
#include "interrupts.h" #include "config.h" volatile bool limitTriggered = false; volatile unsigned long lastLimitInterruptUs = 0; void IRAM_ATTR onLimitTriggered() { unsigned long now = millis(); if (now - lastLimitInterruptUs < DEBOUNCE_MS) return; lastLimitInterruptUs = now; limitTriggered = true; } void attachInputInterrupts() { attachInterrupt(digitalPinToInterrupt(LIMIT_SWITCH_PIN), onLimitTriggered, FALLING); } static bool btnPrevState = false; static unsigned long btnPressStart = 0; static bool btnTapPending = false; static bool btnHoldActive = false; static bool btnHoldOutdated = false; void updateButton() { bool current = isButtonHeld(); if (!current && btnHoldOutdated) { btnHoldOutdated = false; } if (current && !btnPrevState) { btnPressStart = millis(); btnHoldActive = false; } if (current && !btnHoldActive && !btnHoldOutdated && (millis() - btnPressStart > 1000)) { btnHoldActive = true; } if (!current && btnPrevState) { unsigned long duration = millis() - btnPressStart; if (duration > 50 && duration < 1000) { btnTapPending = true; } btnHoldActive = false; } if (btnHoldOutdated) { btnHoldActive = false; } btnPrevState = current; } bool isButtonTapPending() { return btnTapPending; } void consumeButtonTap() { btnTapPending = false; } bool isButtonHeld() { return (digitalRead(BUTTON_PIN) == LOW); } bool isButtonHoldActive() { return btnHoldActive; } void OutdateButtonHold() { btnHoldOutdated = true; } bool isButtonHoldOutdated() { return btnHoldOutdated; } bool isLimitHeld() { return (digitalRead(LIMIT_SWITCH_PIN) == LOW); }