次のコードhttp://pastebin.com/25ugwNhK#があります。これは、基本的に 7 つの異なる周波数のイコライザーの色の値を読み取り、それらを色にマップします。次に、両端から始まる文字列に投影されたそれらをミラーリングします。
void EQcenterBarString(){
// reads eq and plugs RGB values directly into each consecutive pixel, mirrored from center.
if(LoopCnt <= PixelCount) {
readEQ();
//Add new color to array at pointer position
//For Array replace LoopCnt with row number
leds[LoopCnt].r = ledRed;
leds[LoopCnt].g = ledGreen;
leds[LoopCnt].b = ledBlue;
//now the opposite
//For Array replace Pixel - Loop with ROWS - row number
leds[PixelCount - LoopCnt].r = ledRed;
leds[PixelCount - LoopCnt].g = ledGreen;
leds[PixelCount - LoopCnt].b = ledBlue;
FastSPI_LED.show();
LoopCnt++;
}else{LoopCnt=0;}
}
これを [ROWS] [COLS] の配列で使用できるようにしたいのですが、配列を更新またはループするピクセルを取得することに感銘を受けました。
私の疑似コードは次のようになります。
void EQcenterBarArray(){
int pixel = 0, rows = 0, cols = 0;
//rows = 0, loop through till the end going down the array, rows++
for(rows = 0; rows < ROWS; rows++) {
readEQ();
// should light up a whole row at once starting from the beginning of the array
while (cols != COLS) { //while in row # x fill all the col values until = COL value
pixel = ( LEDmatrix[rows][cols] ); // set pixel index to the array pos
leds[pixel].r = ledRed;
leds[pixel].g = ledGreen;
leds[pixel].b = ledBlue;
FastSPI_LED.show(); //update the pixel and move to next col value
cols++; //should fill whole col on row x ?
}
//now the opposite side
// should light up a whole row at once starting from the end of the array
while (cols != COLS) {
pixel = ( LEDmatrix[(ROWS-1) - rows][cols] ); //take the total# of ROWS and subtract the current row value to create a mirror effect?
leds[pixel].r = ledRed;
leds[pixel].g = ledGreen;
leds[pixel].b = ledBlue;
FastSPI_LED.show();
cols++;
}
}
}
ただし、FastSPI_LED ライブラリを使用して WS2801 ライトを備えた arduino でこれを実行すると、1 つの行だけが点灯し、すべての行を循環しませんか?