Aslesen von Arraywerten.

Hallo,
ich habe folgendes Problem:
Ich habe ein Array und möchte dieses auslesen um die Werte an die WS2812 LEDs auszugeben. Ich habe eine Matrix von 3 x 3 WS2812 LEDs.

// Funktion, LED Nummer, Rot, Grün, Blau, Deleay
PROGMEM uint8_t LEDValues[] = {
  1, 0, 0, 0, 255, 200,
  1, 1, 0, 0, 255, 200,
  1, 2, 0, 0, 255, 200,
  1, 3, 0, 0, 255, 200,
  1, 4, 0, 0, 255, 200,
  1, 5, 0, 0, 255, 200,
  1, 6, 0, 0, 255, 200,
  1, 7, 0, 0, 255, 200,
  1, 8, 0, 0, 255, 200,
  1, 0, 0, 255, 0, 200,
  1, 1, 0, 255, 0, 200,
  1, 2, 0, 255, 0, 200,
  1, 3, 0, 255, 0, 200,
  1, 4, 0, 255, 0, 200,
  1, 5, 0, 255, 0, 200,
  1, 6, 0, 255, 0, 200,
  1, 7, 0, 255, 0, 200,
  1, 8, 0, 255, 0, 200,
  1, 0, 255, 0, 0, 200,
  1, 1, 255, 0, 0, 200,
  1, 2, 255, 0, 0, 200,
  1, 3, 255, 0, 0, 200,
  1, 4, 255, 0, 0, 200,
  1, 5, 255, 0, 0, 200,
  1, 6, 255, 0, 0, 200,
  1, 7, 255, 0, 0, 200,
  1, 8, 255, 0, 0, 200,
  1, 0, 0, 0, 0, 1,
  1, 1, 0, 0, 0, 1,
  1, 2, 0, 0, 0, 1,
  1, 3, 0, 0, 0, 1,
  1, 4, 0, 0, 0, 1,
  1, 5, 0, 0, 0, 1,
  1, 6, 0, 0, 0, 1,
  1, 7, 0, 0, 0, 1,
  1, 8, 0, 0, 0, 1,
  0, 0, 0, 0, 0, 0,
};

Wenn ich das Array auf die folgende Art auslese, funktioniert alles:

Function1(LEDValues[1], LEDValues[2], LEDValues[3], LEDValues[4], LEDValues[5]);
Function1(LEDValues[7], LEDValues[8], LEDValues[9], LEDValues[10], LEDValues[11]);
Function1(LEDValues[13], LEDValues14], LEDValues[15], LEDValues[16], LEDValues[17]);

Rufe ich das Array aber folgendermaßen auf, dann passt Garnichts mehr.

For (x = 0; x < 18; x = x + 6)  {
Function1(LEDValues[x + 1], LEDValues[x + 2], LEDValues[x + 3], LEDValues[x + 4], LEDValues[x + 5]);
}

Prinzipiell ist es das gleiche, nur das im Index eine Variable hinzugekommen ist. Wenn ich mir die Werte von LEDValues[x + 1] oder von [x + 1] anzeigen lasse, steht da immer „0“. Dasselbe passiert auch bei anderen Verschachtelungen, wie bei einer Switch Anweisung. Es scheint hier einen Bug im Compiler zu geben, oder hab ich da irgendwas übersehen.
Fast das gleiche Programm bei einem Ti Prozessor MSP430G2553 funktionier ohne Probleme, daher gehe ich davon aus, das ich keinen Logischen Fehler gemacht habe.

Das geht so generell nicht. Ich weiß nicht wie du da Werte bekommst, aber du kannst PROGMEM Arrays nicht wie normale Arrays ansprechen. Sondern du brauchst spezielle Makros um die Werte aus dem Flash ins RAM zu kopieren.

In diesem Fall pgm_read_byte_near():

http://www.nongnu.org/avr-libc/user-manual/pgmspace.html

Super, Danke für diese sehr hifreiche Antwort.
Genau so funktioniert es jetzt.