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