#ifndef LED_BAR_H #define LED_BAR_H 1 #include #define NB_LED_BAR_GPIO 10 #define MAX_DUTY_STEPS NB_LED_BAR_GPIO #define DUTY_STEP 1 // FORWARD: left to right, BACKWARD: right to left. enum DIRECTION {FORWARD, BACKWARD}; static const int LED_BAR_GPIO[NB_LED_BAR_GPIO] = {28, 27, 26, 22, 21, 20, 19, 18, 17, 16}; typedef struct led led; struct led { size_t gpio; size_t pos; size_t level; led *next_led; led *previous_led; }; typedef struct leds leds; struct leds { led data[NB_LED_BAR_GPIO]; led *cur; short direction; }; // Wrapper around sleep methods (Pico SDK & GCC stdlib). void _sleep(size_t seconds); // Wrapper around `set_pwm_gpio_level`func Pico SDK. void _set_pwm_gpio_level(size_t gpio, size_t level); void set_led_level(led *l, size_t level); void print_led_bar_state(leds *l); // Initialize led bar. The default direction at initialization is `FORWARD`. void init_leds(leds *l); // Switch the current direction of the meteor flow by switching the next & previous led nodes. void switch_direction(leds *l); // Display a meteor flow like on the LED bar. Play with `delay` argument to increase/reduce flow speed. void run_meteor(leds *l, size_t delay_ms); // "Breathing" like for one led in the LED bar. void breath_led(leds *l, size_t pos, size_t max_level, size_t step); // Turns on/off the LED bar in a wave flow fashion. void run_wave(leds *l, size_t delay_ms); #endif