#include <stdio.h> #include <stdint.h> #include "board.h" #include "periph/gpio.h" #include "ztimer.h" // typedef struct { // uint8_t pressed_series; // uint8_t blink_multiplier; // } button_context_t; // // void timer_cb (void *arg) { // button_context_t* ctx = (button_context_t*)arg; // if (!gpio_read(BTN0_PIN)) { // ++(ctx->pressed_series); // } // // gpio_toggle(LED0_PIN); // // gpio_irq_enable(BTN0_PIN); // } // // void button_irq_handler(void *arg) { // static ztimer_t timer_handler = { // .callback = timer_cb, // .arg = arg // }; // // button_context_t* ctx = (button_context_t*)arg; // // // gpio_irq_disable(BTN0_PIN); // ztimer_set(ZTIMER_USEC, &timer_handler, 200 * US_PER_MS); // } int main(void) { // button_context_t ctx = { // .pressed_series = 0, // .blink_multiplier = 3 // }; uint8_t blink_cnt = 0; uint8_t blink_cnt_lim = 10; uint8_t press_cnt = 0; gpio_init(LED0_PIN, GPIO_OUT); gpio_init(BTN0_PIN, GPIO_IN_PU); // gpio_init_int(BTN0_PIN, GPIO_IN_PU, GPIO_FALLING, button_irq_handler, &ctx); for (;;) { if (!gpio_read(BTN0_PIN)) { ++press_cnt; } else { press_cnt = 0; } if (press_cnt >= 20) { blink_cnt_lim = blink_cnt_lim == 10 ? 30 : 10; } ++blink_cnt; if (blink_cnt > blink_cnt_lim) { blink_cnt = 0; gpio_toggle(LED0_PIN); } ztimer_sleep(ZTIMER_USEC, 100 * US_PER_MS); } }