You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1009 B
42 lines
1009 B
|
|
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 {
|
|
// 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);
|
|
}
|
|
|