This implements a version of THE ULTIMATE DEBOUNCER(TM) from hackaday.
It can monitor multiple pins, and sends button events over a queue for your application to process.
Only the following pins can be used as inputs on the ESP32:
0-19, 21-23, 25-27, 32-39
button_event_t ev;
QueueHandle_t button_events = button_init(PIN_BIT(BUTTON_1) | PIN_BIT(BUTTON_2));
while (true) {
if (xQueueReceive(button_events, &ev, 1000/portTICK_PERIOD_MS)) {
if ((ev.pin == BUTTON_1) && (ev.event == BUTTON_DOWN)) {
// ...
}
if ((ev.pin == BUTTON_2) && (ev.event == BUTTON_DOWN)) {
// ...
}
}
}
Triggered when the button is first considered pressed.
Also triggered every 50ms during a long press.
Triggered when the button is considered released. In most cases you can use either the UP or DOWN event for your application, and ignore the other.