找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 205|回复: 3
收起左侧

请教一个单片机WS2812流水灯程序的问题

[复制链接]
ID:891876 发表于 2024-11-11 19:31 | 显示全部楼层 |阅读模式
这是一段控制WS2812从中间向两边亮的函数,想请教怎样改成从两边向中间亮呢?改了几次没都成功

lsd.JPG

回复

使用道具 举报

ID:136485 发表于 2024-11-12 08:44 | 显示全部楼层
你既然知道从中间往两边流,那为什么不明白从两边到中间流呢,好好想一想,就比如你的灯24路,那就是一个1开始加到12为停止,一个24减到12停止,两个同时开始流,不就实现了
回复

使用道具 举报

ID:404160 发表于 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]`,这样就会先设置数组的两端,然后逐渐向中间设置。


回复

使用道具 举报

ID:891876 发表于 2024-11-12 13:33 | 显示全部楼层
飞云居士 发表于 2024-11-12 09:33
调整循环的起始和结束条件,以及数组索引的计算方式。修改后的代码:

```c

感谢指导!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表