* https://projects.raspberrypi.org/en/projects/introduction-to-the-pico/10
* recommends pins 18, 22, or 28. */
uint button_pin = 18;
+
+/* Don't bother reporting each separate button press when it is pressed many
+ * times in short succession. (We also use this to de-bounce. :) */
+u32_t minimum_microseconds_between_button_presses = 1000000;
* recommends pins 18, 22, or 28. */
extern uint button_pin;
+/* Don't bother reporting each separate button press when it is pressed many
+ * times in short succession. (We also use this to de-bounce. :) */
+extern u32_t minimum_microseconds_between_button_presses;
+
#endif
static void button_pressed() {
/* This runs in interrupt context; don't linger. */
- char zero = '\0';
- /* We don't check for failure (full queue) here because there's not much to be
- * done about it. */
- queue_try_add(&queue, &zero);
+ static uint64_t last_button_press_time = 0;
+ uint64_t now = time_us_64();
+ uint64_t time_since_last_press = now - last_button_press_time;
+ if (time_since_last_press > minimum_microseconds_between_button_presses) {
+ last_button_press_time = now;
+ char zero = '\0';
+ /* We don't check for failure (full queue) here because there's not much to
+ * be done about it. */
+ queue_try_add(&queue, &zero);
+ }
}
int main() {