2011-01-23 68 views
4

我有一個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); 
    } 
} 

任何更好的方法的想法?

+0

我不確定我是否理解。你想要通用代碼來執行特定的動畫? – 2011-01-23 20:20:27

+0

沒問題。因此,如果我可以說X是一個幅度爲1的矢量,而不是創建一個函數來編碼每個特定的動畫,Z是一個幅度爲-3的矢量,並且能夠簡化附加圖案的創建 – KyleWpppd 2011-01-23 20:23:23

回答

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); 
} 

當然,如果添加了新的要求,如改變倍增因子偶數,治療的3倍數pixelAt功能將變得更加複雜,不同的等等。但是,您可以使用與此類似的函數來減少您必須編寫的函數的數量。一個用於簡單圖案,一個用於偶數/奇數圖案,一個用於三角形的倍數,等等。取決於模式的差異,以及代碼的空間。

相關問題