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);
160 void 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;
184 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)
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)