【BW16】改写官方SW2812基本库来控制SW2812 RGBW

BW16 改写官方SW2812基本库

本次主要解决BW16官方SW2812基本库不支持对RGBW类的led进行控制。

1、根据自己电脑路径找到下图两个文件:在这里插入图片描述

2、主要改写的函数如下:

void WS2812B::sendPixel(uint8_t red ,uint8_t green ,uint8_t blue, uint8_t white, uint8_t mode) {
    if (mode == 0)
    {
        uint8_t grb_in_array[3] = {green, red, blue};
        //Set a bit pattern corresponding to RGB = 0,0,0 for WS2812B LED timings
        uint16_t grb_out_array[6] = {0x0924, 0x0924, 0x0924, 0x0924, 0x0924, 0x924};
        //Check the input colours bits and output it as a '1' or '0'.
        for (int i = 0; i < 6; i++) {
            //check the first four bits of each colours
            if ((i % 2) == 0) {
                grb_out_array[i] |= (grb_in_array[i/2] & 0x80) ? (0x0400) : (0);
                grb_out_array[i] |= (grb_in_array[i/2] & 0x40) ? (0x0080) : (0);
                grb_out_array[i] |= (grb_in_array[i/2] & 0x20) ? (0x0010) : (0);
                grb_out_array[i] |= (grb_in_array[i/2] & 0x10) ? (0x0002) : (0);
            //check the last four bits of each colours
            } else {
                grb_out_array[i] |= (grb_in_array[i/2] & 0x08) ? (0x0400) : (0);
                grb_out_array[i] |= (grb_in_array[i/2] & 0x04) ? (0x0080) : (0);
                grb_out_array[i] |= (grb_in_array[i/2] & 0x02) ? (0x0010) : (0);
                grb_out_array[i] |= (grb_in_array[i/2] & 0x01) ? (0x0002) : (0);
            }
            spi_slave_write((spi_t *)pSpiMaster, grb_out_array[i]);
        }
    }
    else if(mode == 1)
        {
            uint8_t grb_in_array[4] = { green, red, blue, white };
            //Set a bit pattern corresponding to RGB = 0,0,0 for WS2812B LED timings
            uint16_t grb_out_array[8] = { 0x0924, 0x0924, 0x0924, 0x0924, 0x0924, 0x924, 0x0924, 0x924 };
            //Check the input colours bits and output it as a '1' or '0'.
            for (int i = 0; i < 8; i++) {
                //check the first four bits of each colours
                if ((i % 2) == 0) {
                    grb_out_array[i] |= (grb_in_array[i / 2] & 0x80) ? (0x0400) : (0);
                    grb_out_array[i] |= (grb_in_array[i / 2] & 0x40) ? (0x0080) : (0);
                    grb_out_array[i] |= (grb_in_array[i / 2] & 0x20) ? (0x0010) : (0);
                    grb_out_array[i] |= (grb_in_array[i / 2] & 0x10) ? (0x0002) : (0);
                    //check the last four bits of each colours
                }
                else {
                    grb_out_array[i] |= (grb_in_array[i / 2] & 0x08) ? (0x0400) : (0);
                    grb_out_array[i] |= (grb_in_array[i / 2] & 0x04) ? (0x0080) : (0);
                    grb_out_array[i] |= (grb_in_array[i / 2] & 0x02) ? (0x0010) : (0);
                    grb_out_array[i] |= (grb_in_array[i / 2] & 0x01) ? (0x0002) : (0);
                }
                spi_slave_write((spi_t*)pSpiMaster, grb_out_array[i]);
               }
    
        }
}

以上代码中增加(uint8_t white, uint8_t mode)两个函数来进行设定参数,white=颜色值;mode=模式选择(0:RGB;1RGBW;)

总体改写情况如下:(修改文件已打包上传)

在这里插入图片描述
改写过的库文件下载:点击下载(真是路径如下图所示)
在这里插入图片描述
注:基本库的改写仅供参考学习,可以根据自己需求自己升华使用!

  • 15
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会放牛的娃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值