2011-01-23 8 views
4

私はArduinoを持っており、配列内のピクセルをアニメーション化する最も効率的な方法を見つけようとしています。配列は、30 uint8_tの3つの配列で表されます。 (30ピクセル* R + G + Bレベル0〜255)。配列へのアニメーション

ピクセルをアレイの下側に独立して移動する最も良い方法は何ですか?これはメモリが限られた環境(2 KB RAM)で、アレイは720バイトを占有します。私はもともと各ピクセルに配列を使用しようとしていて、メモリが不足していました。 2番目の実装では、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

わかりません。汎用コードで特定のアニメーションを実行しますか? –

+0

正確に。したがって、特定のアニメーションをコーディングする関数を作成するのではなく、Xが大きさ1のベクトルであり、Zが大きさ-3のベクトルであり、追加のパターンの作成を簡略化できると言うことができる場合は – KyleWpppd

+0

できますアニメーションに使用したいパラメータのリスト(サイクルあたりのステップ数、停止前のサイクル数、方向など)を照合し、それらを1つずつ実装することをお勧めします。次に、アニメーションをパラメータのリストとして指定することができます。 –

答えて

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の倍数の治療、はるかに複雑になりますただし、この関数と似た関数を使用して、作成する関数の数を減らすことができます。 1つは単純なパターン用、1つは偶数/奇数パターン用、1つは3の倍数用などです。どのようにパターンが異なっているか、コードにどれくらいのメモリ容量があるかによって異なります。

+0

これは素晴らしいことです!私はそれをどのように動かすことができるかについての精神的なブロックを持っていた。 – KyleWpppd