Rainbow animatino
This commit is contained in:
parent
57c94b2423
commit
fedf6015df
|
@ -25,16 +25,22 @@ typedef enum {
|
||||||
ANIM_TE_STARTUP,
|
ANIM_TE_STARTUP,
|
||||||
ANIM_FT_STARTUP,
|
ANIM_FT_STARTUP,
|
||||||
ANIM_KNIGHT_RIDER,
|
ANIM_KNIGHT_RIDER,
|
||||||
|
ANIM_RAINBOW,
|
||||||
} LEDAnimation;
|
} LEDAnimation;
|
||||||
|
|
||||||
void led_start_animation(LEDAnimation anim);
|
void led_start_animation(LEDAnimation anim);
|
||||||
void led_anim_te_startup(ULONG _);
|
void led_anim_te_startup(ULONG _);
|
||||||
void led_anim_ft_startup(ULONG _);
|
void led_anim_ft_startup(ULONG _);
|
||||||
void led_anim_knight_rider(ULONG _);
|
void led_anim_knight_rider(ULONG _);
|
||||||
|
void led_anim_rainbow(ULONG _);
|
||||||
|
|
||||||
void led_anim_blinker(uint8_t r, uint8_t g, uint8_t b,
|
void led_anim_blinker(uint8_t r, uint8_t g, uint8_t b,
|
||||||
uint32_t brightness_steps, uint32_t next_led_steps,
|
uint32_t brightness_steps, uint32_t next_led_steps,
|
||||||
uint32_t delay);
|
uint32_t delay);
|
||||||
|
|
||||||
|
void led_hsv_to_rgb(float h, float s, float v, uint8_t *r, uint8_t *g,
|
||||||
|
uint8_t *b);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -63,12 +63,12 @@ void led_all_off() { memset(led_buf, 0, sizeof(led_buf)); }
|
||||||
|
|
||||||
void led_thread_entry(ULONG child_thread_stack_addr) {
|
void led_thread_entry(ULONG child_thread_stack_addr) {
|
||||||
child_thread_stack = (void *)child_thread_stack_addr;
|
child_thread_stack = (void *)child_thread_stack_addr;
|
||||||
led_start_animation(ANIM_KNIGHT_RIDER);
|
led_start_animation(ANIM_RAINBOW);
|
||||||
while (1) {
|
while (1) {
|
||||||
tx_thread_sleep(10);
|
tx_thread_sleep(10);
|
||||||
if (child_thread.tx_thread_state == TX_COMPLETED) {
|
if (child_thread.tx_thread_state == TX_COMPLETED) {
|
||||||
tx_thread_sleep(20);
|
tx_thread_sleep(20);
|
||||||
led_start_animation(ANIM_FT_STARTUP);
|
led_start_animation(ANIM_TE_STARTUP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,9 @@ void led_start_animation(LEDAnimation anim) {
|
||||||
case ANIM_KNIGHT_RIDER:
|
case ANIM_KNIGHT_RIDER:
|
||||||
animation_entry = led_anim_knight_rider;
|
animation_entry = led_anim_knight_rider;
|
||||||
break;
|
break;
|
||||||
|
case ANIM_RAINBOW:
|
||||||
|
animation_entry = led_anim_rainbow;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -154,6 +157,22 @@ void led_anim_knight_rider(ULONG _) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void led_anim_rainbow(ULONG _) {
|
||||||
|
size_t tail = 0;
|
||||||
|
float offset = 0.0f;
|
||||||
|
while (1) {
|
||||||
|
for (size_t i = 0; i < N_LEDS; i++) {
|
||||||
|
size_t led = (tail + i) % N_LEDS;
|
||||||
|
uint8_t r, g, b;
|
||||||
|
float hue = fmodf(offset + i * 360.0f / N_LEDS, 360.0f);
|
||||||
|
led_hsv_to_rgb(hue, 1, 1, &r, &g, &b);
|
||||||
|
led_set(led, r, g, b);
|
||||||
|
}
|
||||||
|
offset = fmodf(offset + 2.0f, 360.0f);
|
||||||
|
tx_thread_sleep(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void led_anim_blinker(uint8_t r, uint8_t g, uint8_t b,
|
void led_anim_blinker(uint8_t r, uint8_t g, uint8_t b,
|
||||||
uint32_t brightness_steps, uint32_t next_led_steps,
|
uint32_t brightness_steps, uint32_t next_led_steps,
|
||||||
uint32_t delay) {
|
uint32_t delay) {
|
||||||
|
@ -196,6 +215,42 @@ void led_anim_blinker(uint8_t r, uint8_t g, uint8_t b,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void led_hsv_to_rgb(float h, float s, float v, uint8_t *r, uint8_t *g,
|
||||||
|
uint8_t *b) {
|
||||||
|
float c = v * s;
|
||||||
|
float x = c * (1 - fabs(fmod(h / 60.0, 2) - 1));
|
||||||
|
float m = v - c;
|
||||||
|
float r1, g1, b1;
|
||||||
|
if (h < 60) {
|
||||||
|
r1 = c;
|
||||||
|
g1 = x;
|
||||||
|
b1 = 0;
|
||||||
|
} else if (h < 120) {
|
||||||
|
r1 = x;
|
||||||
|
g1 = c;
|
||||||
|
b1 = 0;
|
||||||
|
} else if (h < 180) {
|
||||||
|
r1 = 0;
|
||||||
|
g1 = c;
|
||||||
|
b1 = x;
|
||||||
|
} else if (h < 240) {
|
||||||
|
r1 = 0;
|
||||||
|
g1 = x;
|
||||||
|
b1 = c;
|
||||||
|
} else if (h < 300) {
|
||||||
|
r1 = x;
|
||||||
|
g1 = 0;
|
||||||
|
b1 = c;
|
||||||
|
} else {
|
||||||
|
r1 = c;
|
||||||
|
g1 = 0;
|
||||||
|
b1 = x;
|
||||||
|
}
|
||||||
|
*r = (int)((r1 + m) * 255.0 + 0.5);
|
||||||
|
*g = (int)((g1 + m) * 255.0 + 0.5);
|
||||||
|
*b = (int)((b1 + m) * 255.0 + 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *handle) {
|
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *handle) {
|
||||||
if (handle != hspi) {
|
if (handle != hspi) {
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue