8#include "generated/ws2812.pio.h" 
   12    pio_sm_put_blocking(pio0, 0, pixel_grb << 8u);
 
 
   17    for (uint32_t i = 0; i < len; ++i)
 
 
   25    uint32_t off = 
URGB(0, 0, 0);
 
 
   32    return URGB(brightness, 0, 0);
 
 
   37    return URGB(0, brightness, 0);
 
 
   42    return URGB(0, 0, brightness);
 
 
   47    return URGB(brightness, brightness, brightness);
 
 
   52    return URGB(brightness * 3 / 4, 0, brightness);
 
 
   57    return URGB(brightness, brightness, 0);
 
 
   62    return URGB(0, brightness, brightness);
 
 
   67    return URGB(brightness, brightness / 3, 0);
 
 
   72    return URGB(brightness, brightness / 3, brightness / 3);
 
 
   77    return URGB(brightness / 3, brightness * 2 / 3, brightness);
 
 
   82    return URGB(brightness, 0, brightness);
 
 
   87    uint32_t red = 
URGB(brightness, 0, 0);
 
 
   93    uint32_t green = 
URGB(0, brightness, 0);
 
 
   99    uint32_t blue = 
URGB(0, 0, brightness);
 
 
  105    uint32_t white = 
URGB(brightness, brightness, brightness);
 
 
  111    uint32_t purple = 
URGB(brightness * 3 / 4, 0, brightness);
 
 
  117    uint32_t yellow = 
URGB(brightness, brightness, 0);
 
 
  123    uint32_t cyan = 
URGB(0, brightness, brightness);
 
 
  129    uint32_t orange = 
URGB(brightness, brightness / 3, 0);
 
 
  135    uint32_t pink = 
URGB(brightness, brightness / 3, brightness / 3);
 
 
  141    uint32_t turquoise = 
URGB(brightness / 3, brightness * 2 / 3, brightness);
 
 
  147    uint32_t magenta = 
URGB(brightness, 0, brightness);
 
 
  153    for (uint32_t i = 0; i < len; ++i)
 
  155        uint32_t color = 
hsv_to_rgb(i * 360 / len, 255, 255);
 
 
  160void apply_rainbow_wheel_effect(uint32_t len, uint16_t* base_hue, uint8_t* speed_factor, uint8_t* density_factor, 
volatile uint8_t* brightness)
 
  162    for (uint32_t i = 0; i < len; ++i)
 
  164        uint16_t hue = (*base_hue + i * 360 / len * *density_factor) % 360;
 
  165        uint32_t color = 
hsv_to_rgb(hue, 255, *brightness);
 
  169    *speed_factor = rand() % 3 + 6; 
 
  170    *base_hue += *speed_factor;
 
 
  176    for (uint32_t i = 0; i < len; ++i)
 
  178        uint32_t color = 
hsv_to_rgb(*hue, 255, *brightness);
 
  181    *hue += *speed_factor;
 
 
  184void apply_breathing_effect(uint32_t len, uint8_t* speed_factor, uint32_t* color, 
volatile uint8_t* base_brightness, uint8_t* brightness, 
bool* breathing_up)
 
  186    uint8_t min_brightness = 15;
 
  187    uint8_t max_brightness = *base_brightness;
 
  188    if (max_brightness < min_brightness)
 
  189        max_brightness = min_brightness;
 
  190    for (uint32_t i = 0; i < len; ++i)
 
  192        uint8_t r = 
URGB_R(*color);
 
  193        uint8_t g = 
URGB_G(*color);
 
  194        uint8_t b = 
URGB_B(*color);
 
  195        uint32_t color = 
URGB(r * *brightness / 255, g * *brightness / 255, b * *brightness / 255);
 
  198    if (*brightness >= max_brightness)
 
  200        *breathing_up = 
false;
 
  201        *brightness = max_brightness;
 
  203    else if (*brightness <= min_brightness)
 
  205        *breathing_up = 
true;
 
  206        *brightness = min_brightness;
 
  209        *brightness += *speed_factor;
 
  211        *brightness -= *speed_factor;
 
 
  217    int num_led_flash = 10;
 
  218    int *random_indices = (
int *)malloc(num_led_flash * 
sizeof(
int));
 
  219    for (
int i = 0; i < num_led_flash; ++i)
 
  220        random_indices[i] = rand() % len;
 
  221    int leds_handled = 0;
 
  222    while (leds_handled < len)
 
  225        if (random_indices[i] == leds_handled)
 
  229                new_color = 
URGB(rand() % 256, rand() % 256, rand() % 256);
 
  232                uint8_t r = 
URGB_R(*color);
 
  233                uint8_t g = 
URGB_G(*color);
 
  234                uint8_t b = 
URGB_B(*color);
 
  235                new_color = 
URGB(r, g, b);
 
  239            if (i >= num_led_flash)
 
 
uint32_t hsv_to_rgb(uint16_t h, uint8_t s, uint8_t v)
Convert HSV to RGB.
void apply_flashing_effect(uint32_t len, uint32_t *color)
Apply flashing effect.
uint32_t get_purple(uint8_t brightness)
Get purple color.
uint32_t get_yellow(uint8_t brightness)
Get yellow color.
void set_all_cyan(uint32_t len, uint8_t brightness)
Set all leds cyan.
void apply_breathing_effect(uint32_t len, uint8_t *speed_factor, uint32_t *color, volatile uint8_t *base_brightness, uint8_t *brightness, bool *breathing_up)
Apply breathing effect.
uint32_t get_red(uint8_t brightness)
Get red color.
void set_all_orange(uint32_t len, uint8_t brightness)
Set all leds orange.
void set_all_pink(uint32_t len, uint8_t brightness)
Set all leds pink.
void turn_off_all(uint32_t len)
Turn off all leds.
uint32_t get_white(uint8_t brightness)
Get white color.
void set_all_blue(uint32_t len, uint8_t brightness)
Set all leds to blue.
void set_all_turquoise(uint32_t len, uint8_t brightness)
Set all leds turquoise.
uint32_t get_green(uint8_t brightness)
Get green color.
void set_all_magenta(uint32_t len, uint8_t brightness)
Set all leds magenta.
void set_all_white(uint32_t len, uint8_t brightness)
Set all leds to white.
void set_all_yellow(uint32_t len, uint8_t brightness)
Set all leds yellow.
void apply_rainbow_wheel_effect(uint32_t len, uint16_t *base_hue, uint8_t *speed_factor, uint8_t *density_factor, volatile uint8_t *brightness)
Apply rainbow wheel effect.
uint32_t get_pink(uint8_t brightness)
Get pink color.
uint32_t get_blue(uint8_t brightness)
Get blue color.
uint32_t get_cyan(uint8_t brightness)
Get cyan color.
void set_all_green(uint32_t len, uint8_t brightness)
Set all leds to green.
uint32_t get_orange(uint8_t brightness)
Get orange color.
void set_all_red(uint32_t len, uint8_t brightness)
Set all leds to red.
uint32_t get_magenta(uint8_t brightness)
Get magenta color.
void set_rainbow_spectrum(uint32_t len)
Set all leds to rainbow spectrum.
uint32_t get_turquoise(uint8_t brightness)
Get turquoise color.
void set_all_leds(uint32_t color, uint32_t len)
Set all leds to the same color.
void apply_rainbow_cycle_effect(uint32_t len, uint16_t *hue, uint8_t *speed_factor, volatile uint8_t *brightness)
Apply rainbow cycle effect.
void set_all_purple(uint32_t len, uint8_t brightness)
Set all leds purple.
static void put_pixel(uint32_t pixel_grb)