c – 动画到数组

我有一个Arduino,我正在尝试找到一种最有效的方法来为数组中的像素设置动画.该阵列由3个30 uint8_ts的数组表示. (30像素* R G B级别0-255).

将像素独立移动到阵列的最佳方法是什么?这是一个内存受限的环境(2 KB RAM),该数组占用720个字节.我原本试图为每个像素使用一个数组,并且内存不足.使用if语句的第二个实现,它运行良好,但制作新模式非常繁琐.我正在寻找一种解决问题的方法,这可能比我现在解决的方法更好.

这是我想要动画的模式的一个例子.

X moves forward 1 each cycle.
Y moves forward 3 places then back 2.
Z moves backwards 3 places each cycle.

|_|X|_|_|_|_|_|_|_|_|_|_|_|_|Y|_|_|_|_|_|_|_|_|_|_|_|_|_|_|Z|
|_|_|X|_|_|_|_|_|_|_|_|_|_|_|_|_|_|Y|_|_|_|_|_|_|_|_|Z|_|_|_|
|_|_|_|X|_|_|_|_|_|_|_|_|_|_|_|Y|_|_|_|_|_|_|_|Z|_|_|_|_|_|_|

这是我要使用的代码.

void animateScene1() {
    for(int i = 0; i <= numPixels; i++) {
        setColor(i, X);
        if(i < 15) {
            if(i % 2 == 0)
                setColor((i+15)+3), Y);
            else
                setColor((i+15)-2), Y);
        }
        if(i < 10)
            setColor(numPixels-3*i, Z);
    }
}

有更好的方法吗?

最佳答案 这样的功能怎么样?

int pixelAt(int index, int min, int max, int a, int b, int b_2)
{
    int pixel = -1;

    if (min <= index && index <= max)
    {
        pixel = a * index + b;
        if (i % 2)
        {
            pixel += b_2;
        }
    }

    return pixel;
}

然后你会有:

for (int i = 0; i < numPixels; i++)
{
    // This assumes setColor(-1, x) does nothing
    setColor(pixelAt(i, 0, numPixels, 1, 0, 0), X);
    setColor(pixelAt(i, 0, 15, 1, 18, -5), Y);
    setColor(pixelAt(i, 0, 10, -3, numPixels, 0), Z);
}

当然,如果添加新的要求,pixelAt函数将变得更加复杂,例如更改偶数的乘法因子,以不同的方式处理3的倍数等.但是,您可以使用与此类似的函数来减少数量你必须写的功能.一个用于简单模式,一个用于偶数/奇数模式,一个用于三倍数,等等.取决于模式的不同程度,以及代码的内存空间.

点赞