"Rulla ut" pixlar Arduino, Neopixel. Två stora frågor.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

"Rulla ut" pixlar Arduino, Neopixel. Två stora frågor.

Inlägg av PopUnoNkoK »

Jag har en liten strip med 8st adresserbara RGBleds. (Neopixel).

Jag håller på att testa att skriva en kod för att testa att fota med lång slutartid och måla med denna ljusstrip.

Egentligen har jag två frågor. Den ena är hur jag får min kod att fungera, den andra är hur jag kan skriva koden mer effektiv. För jag är helt övertygad om att det går att skriva mycket MYCKET effektivare.


Jag har nu ett antal Arrays som tillsammans bildar ett åtta pixlar högt hjärta.

Kod: Markera allt

int nArray0[8]={0,0,255,255,0,0,0,0};
int nArray1[8]={0,255,255,255,255,0,0,0};
int nArray2[8]={255,255,255,255,255,255,0,0};
int nArray3[8]={255,255,255,255,255,255,255,0};
int nArray4[8]={0,255,255,255,255,255,255,255};
int nArray5[8]={255,255,255,255,255,255,255,0};
int nArray6[8]={255,255,255,255,255,255,0,0};
int nArray7[8]={0,255,255,255,255,0,0,0};
int nArray8[8]={0,0,255,255,0,0,0,0};
(Värdet 255 innebär i förlängningen i koden att det blir en röd pixel)

Jag ”snurrar” ut de åtta pixlarna på första raden i en ”while” sats.

Kod: Markera allt

while(num < NUMPIXELS){  
       pixels.setPixelColor(num , pixels.Color(nArray1[num],0,0)); // num i denna kod representerar vilken plats i arrayen som ska skrivas ut. 
       num++;
  }

Detta funkar bra. Men hur jag än gör så lyckas jag inte få till det att bläddra igenom alla arrayer. Jag tänkte mig en While sats som ligger utanför denna Whilesats och som ändrar numret på Arreyen. nArray1 nArray2 nArray3 osv.
Jag har försökt på många olika sätt men får olika error meddelanden. Tyvärr har jag inga exempel nu för jag har prövat och tagit bort och prövat på nytt osv.

Pseudokod för det jag är ute efter skulle kunna se ut nåt sånt här.
while(line < LINENUMBER){
while(num < NUMPIXELS){
pixels.setPixelColor(num , pixels.Color(nArray + line[num],0,0)); // num i denna kod representerar vilken plats i arrayen som ska skrivas ut.
num++;
}
num=0;
line++;
}
Jag försökte Fetmarkera de få delar som är ändringen men det var lite svårt att se. Skit att det inte gick att fetmarkera inom Code taggarna.

Fråga 1:
Har nån nåt tips på hur jag ska lyckas ta en array, rulla igenom alla åtta pixlar, ta nästa array, rulla igenom alla åtta pixlar osv?

Fråga 2:
Hur skulle man kunna göra detta lite effektivare? Jag vet att det finns stora avancerade program där man kan lägga in en gifbild på ett SDkort och få det väldigt snyggt och "flashigt" men jag skulle vilja hitta nått mellanting där jag kanske kan skriva ut lite enkel text MEN fortfarande förstå det mesta av koden. Jag vill alltså hellre lära mig än få en färdig lösning och vara nöjd med den.

//Peter
Användarvisningsbild
Nisse
Inlägg: 908
Blev medlem: 9 juli 2006, 23:25:46
Ort: Kumla

Re: "Rulla ut" pixlar Arduino, Neopixel. Två stora frågor.

Inlägg av Nisse »

Kanske en tvådimensionell array kan hjälpa dig.
Sedan två stycken nästlade for-loopar.

http://forum.arduino.cc/index.php?topic=42629.0
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: "Rulla ut" pixlar Arduino, Neopixel. Två stora frågor.

Inlägg av PopUnoNkoK »

Snyggt...

Jag hade funderat lite i dom banorna men inte hittat nåt. Funkade helt perfekt!

Arrayen

Kod: Markera allt

byte my2dArray[10]∞={
 {0,0,255,255,0,0,0,0},
 {0,255,255,255,255,0,0,0},
 {255,255,255,255,255,255,0,0},
 {255,255,255,255,255,255,255,0},
 {0,255,255,255,255,255,255,255},
 {255,255,255,255,255,255,255,0},
 {255,255,255,255,255,255,0,0},
 {0,255,255,255,255,0,0,0},
 {0,0,255,255,0,0,0,0},
 {0,0,0,0,0,0,0,0}
};
Funktionen som ligger i en While loop

Kod: Markera allt

pixels.Color(my2dArray[line][num],0,0)
Som sagt, fungerar perfekt. Tack!
Skriv svar