最初的设想,就是做个焰火程序,能铺满墙的那种。
开始吧。
焰火需要用到几个重要的函数:
颜色衰减函数,让火光慢慢退到黑色。
ws2812Frame.c
void ws2812_decay() {
uint16_t i;
for (i = 0; i < WS2812_NUM_LEDS1; i++) {
show_buffer1[i].G = show_buffer1[i].G >> 1;
show_buffer1[i].R = show_buffer1[i].R >> 1;
show_buffer1[i].B = show_buffer1[i].B >> 1;
}
for (i = 0; i < WS2812_NUM_LEDS2; i++) {
show_buffer2[i].G = show_buffer2[i].G >> 1;
show_buffer2[i].R = show_buffer2[i].R >> 1;
show_buffer2[i].B = show_buffer2[i].B >> 1;
}
for (i = 0; i < WS2812_NUM_LEDS3; i++) {
show_buffer3[i].G = show_buffer3[i].G >> 1;
show_buffer3[i].R = show_buffer3[i].R >> 1;
show_buffer3[i].B = show_buffer3[i].B >> 1;
}
}
索引色转RGB颜色:
ws2812Frame.cpp
void getRainbowColor(RGBColor_TypeDef *color, uint16_t idx) {
idx = idx % 768;
if (idx < 256) {
co