Ik heb hulp nodig met 2D-array

Hi,

Ik ben met een project bezig waarbij ik 108 computer ventilatoren wil besturen. Deze ventilatoren zitten in een matrix vorm van 9x12. Door te spelen met het aan/uit zetten probeer ik als het ware een 'dotmatrix' te maken waarbij animaties op afgespeeld kunnen worden

Deze ventilatoren worden aan/uit gezet met de functie: " fans[POSITIE]=CHARGE; " POSITIE zegt om welke fan het gaat en CHARGE zegt hoe lang het aan moet staan in milliseconds.

voorbeeld: fans[54]=100;

Dit is de two-dimensional array met 3 frames die ik wil gaan gebruiken als eerste animatie:

int animatie [][108] { { 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0 }, //frame 1 { 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0 }, //frame 2 { 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 75, 75, 75 } //frame 3 };

Mijn vraag is, hoe kan ik frame voor frame (met een aanpasbare frame tussentijd) deze two-dimensional array overzetten in de functie: fans[POSITIE]=CHARGE;

Ik zit hier al super lang mee en ik hoop dat iemand mij kan helpen! Alvast bedankt en vriendelijke groet,

Ik snap waarschijnlijk je probleem niet helemaal.

Als je door een frame itereert (bv. met een for-loop), kun je tellen en als je 108 bereikt weet je dat je het eind van een frame hebt bereikt. De for-loop zal dit al voor je doen.

void loop()
{
  static byte frameNummer;

  for (byte positie = 0; positie < sizeof(animatie[0]); positie++)
  {
    fans[positie] = animatie[frameNummer][positie];
    ...
    ...
  }

  // eenvoudige delay tussen frames
  delay(eenEenvoudigeVertragingDieJeErgensKuntInstellen);

  // volgend frame
  frameNummer++;
  if(frameNummer >= sizeof(animatie)/sizeof(animatie[0]))
  {
    frameNummer = 0;
  }
}

Aangezien je geen programma hebt laten zien, is het een beetje een gok of het zal werken. Maar het zou je het idee moeten geven.

je begin van je idee is wel goed, echter wat doe je als de tijden gaan verschillen, beter is het om alleen dat te veranderen wat je anders wilt dus dan krijg je een heel lange lijst met standen, vergelijk het eens met een led string, daar gebeurt hetzelfde. daar kun je per led 24 bits instellen. en jpuw frame kun je toch gewoon laden, (voor 1..108) if frame>0 dan frameset to nieuwe waarde. je actual frame haalt er telkens 1 af als de tijd om is, bijv 0.1 seconde). je hoeft alleen maar de waardes te veranderen die moeten beginnen. en dat mag natuurlijk met een paar getallen startfan,eindfan ,waarde bijvoorbeeld fan1,fan8,75 dan heb je dus tussen 3 en 108 bytes voor een nieuw frame.