54 lines
1.2 KiB
C
54 lines
1.2 KiB
C
|
|
#ifdef BOARD_BUTTON_PIN
|
|
|
|
volatile bool g_buttonPressed = false;
|
|
volatile uint32_t g_buttonPressTime = -1;
|
|
|
|
void button_action(void)
|
|
{
|
|
BlynkState::set(MODE_RESET_CONFIG);
|
|
}
|
|
|
|
void button_change(void)
|
|
{
|
|
#if BOARD_BUTTON_ACTIVE_LOW
|
|
bool buttonState = !digitalRead(BOARD_BUTTON_PIN);
|
|
#else
|
|
bool buttonState = digitalRead(BOARD_BUTTON_PIN);
|
|
#endif
|
|
|
|
if (buttonState && !g_buttonPressed) {
|
|
g_buttonPressTime = millis();
|
|
g_buttonPressed = true;
|
|
DEBUG_PRINT("Hold the button for 10 seconds to reset configuration...");
|
|
} else if (!buttonState && g_buttonPressed) {
|
|
g_buttonPressed = false;
|
|
uint32_t buttonHoldTime = millis() - g_buttonPressTime;
|
|
if (buttonHoldTime >= BUTTON_HOLD_TIME_ACTION) {
|
|
button_action();
|
|
} else if (buttonHoldTime >= BUTTON_PRESS_TIME_ACTION) {
|
|
// User action
|
|
}
|
|
g_buttonPressTime = -1;
|
|
}
|
|
}
|
|
|
|
void button_init()
|
|
{
|
|
#if BOARD_BUTTON_ACTIVE_LOW
|
|
pinMode(BOARD_BUTTON_PIN, INPUT_PULLUP);
|
|
#else
|
|
pinMode(BOARD_BUTTON_PIN, INPUT_PULLDOWN);
|
|
#endif
|
|
attachInterrupt(BOARD_BUTTON_PIN, button_change, CHANGE);
|
|
}
|
|
|
|
#else
|
|
|
|
#define g_buttonPressed false
|
|
#define g_buttonPressTime 0
|
|
|
|
void button_init() {}
|
|
|
|
#endif
|