动画到数组

时间:2011-01-23 20:16:21

标签: c++ arrays loops arduino

我有一个Arduino,我正在尝试找到一种最有效的方法来为数组中的像素设置动画。该数组由3个30 uint8_t s的数组表示。 (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);
    }
}

有更好方法的想法吗?

1 个答案:

答案 0 :(得分:2)

这样的功能怎么样?

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的倍数等等。但是,您可以使用类似于这个减少你必须写的功能的数量。一个用于简单模式,一个用于偶数/奇数模式,一个用于三倍数,等等。取决于模式的不同程度,以及代码的内存空间。