8x8 matris

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10665
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

8x8 matris

Inlägg av GeekJoan »

Alltså som relativt grön på det här så måste jag fråga för jag blir inte klok.
Har en 8x8 matris WS2812B (Neopixlar) som jag vill styra som om det vore rader och kolumner. Men alla sitter ju på rad.
Så jag tänkte äh, det här måste ju vara lätt. Så jag skrev detta:

Kod: Markera allt

int Row0[] = {0, 1, 2, 3, 4, 5, 6, 7};
int Row1[] = {8, 9, 10, 11, 12, 13, 14, 15};
int Row2[] = {16, 17, 18, 19, 20, 21, 22, 23};
int Row3[] = {24, 25, 26, 27, 28, 29, 30, 31};
int Row4[] = {32, 33, 34, 35, 36, 37, 38, 39};
int Row5[] = {40, 41, 42, 43, 44, 45, 46, 47};
int Row6[] = {48, 49, 50, 51, 52, 53, 54, 55};
int Row7[] = {56, 57, 58, 59, 60, 61, 62, 63};
X=4
Y=5

Så rad 5 kolumn 4.
OK, hämta värdet:
T=RowY[X];
pixels.setPixelColor(T, pixels.Color(128,0,0)); // T pixelplats

Men nä, det går ju inte eftersom den ser RowY som en egen variabel.

Så frågan blir då, hur kan jag sätta ett nummer på variabeln Row och sedan hämta det med tex. Row(Y)?
Användarvisningsbild
papabear
Inlägg: 821
Blev medlem: 14 mars 2004, 03:27:12
Ort: Eskilstuna
Kontakt:

Re: 8x8 matris

Inlägg av papabear »

typ så:

int Rows[][] = {{0, 1, 2, 3, 4, 5, 6, 7},
{8, 9, 10, 11, 12, 13, 14, 15},
{16, 17, 18, 19, 20, 21, 22, 23},
{24, 25, 26, 27, 28, 29, 30, 31},
{32, 33, 34, 35, 36, 37, 38, 39},
{40, 41, 42, 43, 44, 45, 46, 47},
{48, 49, 50, 51, 52, 53, 54, 55},
{56, 57, 58, 59, 60, 61, 62, 63}};
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10665
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: 8x8 matris

Inlägg av GeekJoan »

Å så hämta värdet med: R[Y][X] ?


exit status 1
declaration of 'Rows' as multidimensional array must have bounds for all dimensions except the first
Zkronk
Inlägg: 1423
Blev medlem: 23 augusti 2005, 16:44:36
Ort: Uppsala

Re: 8x8 matris

Inlägg av Zkronk »

Måste man inte alltid specificera den andra dimensionen i 2-dimensionella C-arrayer?

Kod: Markera allt

int Rows[]∞ = {blablabla};
Yes, du hämtar och sätter värden med Rows[5][4] t.ex.
Användarvisningsbild
papabear
Inlägg: 821
Blev medlem: 14 mars 2004, 03:27:12
Ort: Eskilstuna
Kontakt:

Re: 8x8 matris

Inlägg av papabear »

Ja.
(Rows[y][x])

edit:
tänkte skriva att jag vet inte om det kan vara så att du måste ange storlekn, men det verkar det ju som att du måste.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43176
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: 8x8 matris

Inlägg av sodjan »

Det blir kanske lite tydligare om man skriver:

Kod: Markera allt

int PixelArray[][] = {
  {0,   1,  2,  3,  4,  5,  6,  7},
  {8,   9, 10, 11, 12, 13, 14, 15},
  {16, 17, 18, 19, 20, 21, 22, 23},
  {24, 25, 26, 27, 28, 29, 30, 31},
  {32, 33, 34, 35, 36, 37, 38, 39},
  {40, 41, 42, 43, 44, 45, 46, 47},
  {48, 49, 50, 51, 52, 53, 54, 55},
  {56, 57, 58, 59, 60, 61, 62, 63}
};
Sen blir det PixelArray[X][Y] osv...

Skillnaden är bara att det är ett namn som i alla
fall jag tycker säger mer om vad det handlar om.

Du får bestämma vilken ordning du har X och Y, det
har ingen större betydelse bara det är konsekvent...
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10665
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: 8x8 matris

Inlägg av GeekJoan »

Stöter på problem. Har ett gammalt program där en "boll" studsar omkring, som jag kör i den här nya matrisen. Eftersom "bollen" inte ska studsa samma hela tiden så använder jag float tex 1.3. Det har funkat bra på den tidigare displayen. Men denna vägrar eftersom den hämtar värdet i arrayen. LOL.. Den har svårt att hämta värdet i Row[5.4][6.2]

exit status 1
invalid types 'int ∞[float]' for array subscript
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43176
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: 8x8 matris

Inlägg av sodjan »

Nä, det finns ju inga värden mellan de olika värderna i arrayen...
Vad hade du förväntat dig? Bestäm vilket värde du vill ha, avrunda
din float så att det passar och "casta" till en int.
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10665
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: 8x8 matris

Inlägg av GeekJoan »

Jo, det förstod till och med jag.
Användarvisningsbild
Icecap
Inlägg: 26139
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: 8x8 matris

Inlägg av Icecap »

Om du behöver float för riktningens skull är det ju bara att deklarera array'en som float.

Indexeringen i en array kan aldrig vara med float! Du kan ju inte heller skriva till LED#3.7 eller hur? Du skriver till LED#3 eller LED#4.
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10665
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: 8x8 matris

Inlägg av GeekJoan »

Ja, jag är medveten om det.
Får kasta in en cast: X2 = (int) X;
Sado
Inlägg: 84
Blev medlem: 6 april 2007, 14:39:33
Ort: Svealand

Re: 8x8 matris

Inlägg av Sado »

Enklast är väl ändå att lösa det hela matematiskt, typ

Kod: Markera allt

T = x + y * 8;
med reservation för off-by-one. Om man inte vill ha en array för att få det grafiskt överskådligt förstås. Och kanske lite avrundning på det.
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10665
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: 8x8 matris

Inlägg av GeekJoan »

Ska ärligt säga att jag inte riktigt vet vad jag håller på med, men jag tyckte det blev rätt coolt i alla fall.

FILM: https://photos.app.goo.gl/9Nf4w28oYW5Kg9bX9
Sado
Inlägg: 84
Blev medlem: 6 april 2007, 14:39:33
Ort: Svealand

Re: 8x8 matris

Inlägg av Sado »

Fullt godkänt! :bravo:
Skriv svar