最初的设想,就是做个焰火程序,能铺满墙的那种。
开始吧。
焰火需要用到几个重要的函数:
颜色衰减函数,让火光慢慢退到黑色。
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

本文介绍了如何使用STM32平台和WS2812LED灯实现一个焰火效果的程序,涉及颜色衰减函数、索引色转RGB、随机数生成和像素操作。代码展示了创建FireWork类和控制LED阵列以模拟烟花升空和绽放的过程。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



