打印
[STM32F1]

WS2812B渐变色流水算法+PWM DMA驱动

[复制链接]
192|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
biechedan|  楼主 | 2024-2-25 23:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


uint32_t *RGB;//颜色列表数组

void LED_Init(void);
void PWM_Init(void);
uint32_t set_Color_Loop(uint8_t color_length);
void out_RGB(uint16_t data_Max_Length,uint16_t colorwidth);

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    uart_init(115200);
    delay_init();
    LED_Init();
      
        WS2812B_TIM_init();
        uint32_t len = set_Color_Loop(32);//每两种颜色之间的位数
      
    while(1)
    {
                out_RGB(len,8);//8个灯,每次输出8个数据
                delay_ms(80);
    }
}

/**
* colorwidth 每次获取多少位
*/

void out_RGB(uint16_t data_Max_Length,uint16_t colorwidth)
{
        static uint32_t rgb_position = 0;
        for(uint32_t i = 0;i < colorwidth; i++){
                uint16_t c = (rgb_position + i) % data_Max_Length;//末尾颜色数据结束时将首位的收据填充到数组
                send_Data(RGB[c]);
        }
        rgb_position ++;
        rgb_position %= data_Max_Length;
}

/**
* color_length 每种颜色渐变最大长度,总颜色长度:color_length * 3
* return 颜色数据总长度
*/
uint32_t set_Color_Loop(uint8_t color_length)
{
        RGB = (uint32_t*)malloc(color_length*3*sizeof(uint32_t));//分配数组大小,(所有渐变色颜色长度)
        color_length -= 1;
        for(uint8_t i=0;i<=color_length;i++)
        {
                RGB[i] = (((0xff/color_length)*i)<<8)|((0xff/color_length)*(color_length-i));                                                //蓝到绿
                RGB[color_length + 1 +i] = (((0xff/color_length)*i)<<16)|((0xff/color_length)*(color_length-i))<<8; //绿到红
                RGB[((color_length+1)*2) +i] = ((0xff/color_length)*i)|((0xff/color_length)*(color_length-i))<<16;  //红到蓝
        }
        return color_length*3;
}


使用特权

评论回复
沙发
呐咯密密| | 2024-2-26 10:04 | 只看该作者
可以尝试FsatLED库。效果更棒

使用特权

评论回复
板凳
ZYQFBW| | 2024-3-16 08:54 | 只看该作者
呐咯密密 发表于 2024-2-26 10:04
可以尝试FsatLED库。效果更棒

这哈库函数?在哪下载?

使用特权

评论回复
地板
CarterERO| | 2024-3-18 10:17 | 只看该作者
ZYQFBW 发表于 2024-3-16 08:54
这哈库函数?在哪下载?

Arduino第三方库

使用特权

评论回复
5
小夏天的大西瓜| | 2024-3-18 17:48 | 只看该作者
外部硬件还是比较重要的,一般就是PWM进行调压改变颜色的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

276

主题

7732

帖子

11

粉丝