标题: 请教一个单片机WS2812流水灯程序的问题 [打印本页]

作者: 芙蓉焊料    时间: 2024-11-11 19:31
标题: 请教一个单片机WS2812流水灯程序的问题
这是一段控制WS2812从中间向两边亮的函数,想请教怎样改成从两边向中间亮呢?改了几次没都成功




作者: kxcuser    时间: 2024-11-12 08:44
你既然知道从中间往两边流,那为什么不明白从两边到中间流呢,好好想一想,就比如你的灯24路,那就是一个1开始加到12为停止,一个24减到12停止,两个同时开始流,不就实现了
作者: 飞云居士    时间: 2024-11-12 09:33
调整循环的起始和结束条件,以及数组索引的计算方式。修改后的代码:

```c
void WaterLampToCol3(unsigned long _uColor, unsigned char _uTime)
{
    unsigned char i;
    for (i = 0; i < nWs; i++)
    {
        WsDat[i] = _uColor;
        WsDat[nWs - 1 - i] = _uColor;
        WS_L_SetAll();
        delay_ms(_uTime);
    }
    reset();
}
```

1. 循环从 `i = 0` 开始,而不是 `i = nWs/2`。
2. 将 `WsDat[nWs/2 - (i - nWs/2)]` 改为 `WsDat[i]` 和 `WsDat[nWs - 1 - i]`,这样就会先设置数组的两端,然后逐渐向中间设置。



作者: 芙蓉焊料    时间: 2024-11-12 13:33
飞云居士 发表于 2024-11-12 09:33
调整循环的起始和结束条件,以及数组索引的计算方式。修改后的代码:

```c

感谢指导!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1