Seltsamer Fehler bei Serial-Verbindung

Moin!

Ich habe eine kleine LED-Matrix (7x7) und möchte nun mit dem Arduino kleine Animationen darauf abspielen.
Jetzt habe ich einen sehr seltsamen Fehler.
Das eigentliche Programm läuft bereits, doch sobald ich eine Serial-Verbindung hinzufüge, leuchten die LEDs nicht mehr.
Nutze die Adafruit Library + WS2801 LEDs.

Hier der Code:

// Do not remove the include below
#include "Arduino.h"
#include "SPI.h"
#include "Adafruit_WS2801.h"

int dataPin = 13;
int clockPin = 11;
int leds_on[][7][7] = {
    {{1,1,0,0,0,1,1},
     {1,1,0,0,0,1,1},
     {0,0,0,0,0,0,0},
     {0,0,0,0,0,0,0},
     {0,0,0,0,0,0,0},
     {1,1,0,0,0,1,1},
     {1,1,0,0,0,1,1}}
  };

Adafruit_WS2801 strip = Adafruit_WS2801((uint16_t)7, (uint16_t)7, dataPin, clockPin);

void setup() {
  Serial.begin(9600);
  strip.begin();
  strip.show();
}

void setLeds(int i){
  for(int y = 0; y < 7; y++){
    for(int x = 0; x < 7; x++){
      int row = x-6;
      if (row < 0) { row = row * -1; }
      if(leds_on[i][x][y] == 1) { strip.setPixelColor(row,y, 255,0,0); }
      else { strip.setPixelColor(row, y, 0,0,0); }
    }
  }
}

void loop() {
    //strip.setPixelColor(0,0, 255,255,0);
    setLeds(0);
  strip.show();
  delay(500);
}

Das interessante ist:
Kommentiere ich “Serial.begin(9600);” aus, dann läuft alles so wie es laufen sollte.
Lasse ich es aber im Code, dann läuft das Programm nicht mehr (es leuchten gar keine LEDs).
Was mir dazu noch aufgefallen ist:
Wenn ich:

strip.setPixelColor(0,0, 255,255,0);
und
 setLeds(0);

aufrufe, dann geht auch keins von beidem.
Kommentiere ich allerdings setLeds(0) aus, so leuchtet nur eine LED, so wie sie es sollte.
IRGENDWIE scheint Serial.begin() meine setLeds()-Methode außer Kraft zu setzen.

Hat jemand eine Idee, was es seien könnte?

MfG

Das Problem ist das Array.

Wieso brauchst Du ein 3 dimensionales Array und wieso definierst Du nicht die 3. Dimension. Wieso brauchst Du das Array vom Typ integer?

Grüße Uwe

Die 3. Dimension definiere ich durch die Anzahl. Also hier 1. Das passt so. Momentan nehme ich integer einfach nur für 1/0. Könnte auch bool nehmen.

Aber sonst funktioniert es ja genau so. nur wenn ich Serial.begin mit reinnehme geht es nicht mehr

Die 3. Dimension definiere ich durch die Anzahl. Also hier 1. Das passt so.

Die Anzal von was? Grüße Uwe

Nochmal in vernünftig: Man kann immer eine Dimension weniger angeben als benötigt. Die Zahl zieht sich der Code dann aus der Anzahl der Elemente die bei Initalisierung angegeben werden. int leds_on[1][7][7] könnte man hier genauso gut sagen. Ist das selbe Ergebnis.

Also nochmal das eigentliche Problem: // Serial.begin(9600); (auskommentiert funktioniert der Code) Serial.begin(9600); //(nicht auskommentiert funktioniert der Code nicht)

und mit leds_on[1][7][7] hast Du's schon probiert?

Ja. Gerade noch mal getestet. Wie gesagt, wenn ich die Zeile Serial.begin() rausnehme, dann funktioniert alles einwandfrei. Es muss irgendetwas mit Serial zu tun haben.

Wenn Du das Array byte statt int deklarierst ?

byte leds_on[][7][7] = {
    {{1,1,0,0,0,1,1},
     {1,1,0,0,0,1,1},
     {0,0,0,0,0,0,0},
     {0,0,0,0,0,0,0},
     {0,0,0,0,0,0,0},
     {1,1,0,0,0,1,1},
     {1,1,0,0,0,1,1}}
  };

Wow, vielen Dank! So funktioniert es....aber was ich mich gerade frage...Wieso?!

Was hat byte mit int zu tun und dass der Serial-Port dafür sorgt, dass das Programm nicht mehr funktioniert?

Rate mal, wieviel 2KB RAM sind. Und was passiert, wenn das nicht reicht. ( Antwort : Weiss man nicht, da wird nichts abgefangen, irgendwas wird schief gehen )

Nachtrag:

was ich mich gerade frage...Wieso?! Was hat byte mit int zu tun

Ein int ist doppelt so groß wie ein byte ...

Aber wenn der Unterschied grade mal 49 Byte sind, hast du schon viel Glück/Pech gehabt. Pech, dass es dich erwischt hat. Glück, dass es geholfen hat