54 lines
1.4 KiB
C
54 lines
1.4 KiB
C
|
|
#ifndef LED_BAR_H
|
|
#define LED_BAR_H 1
|
|
|
|
#include <stddef.h>
|
|
|
|
#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 |