Go Down

Topic: SD-Cardreader blockiert Funktion der LED Strips (Read 311 times) previous topic - next topic

Member_001

Hi Leute,

Ich habe einen SD Cardreader den ich mit meinem ArduinoUNO beschreiben bzw. lesen möchte, um sozusagen alle Variablen darauf zu speichern, dass bei einem kurzen Stromausfall kein Datenverlust besteht.

Außerdem habe ich LPD8806 LED Strips, die ich ebenfalls mit demselben Arduino anspreche und somit Zahlen von 0-9 darstellen kann(die LEDs sind in 7 Segmenten angeordnet...also in 8er-form). Die LED Strips haben mittlerweile bereits einwandfrei funktioniert und konnten alle Zahlen ohne Probleme darstellen.

Jetzt wo ich den Cardreader angehängt habe, bzw. ihn im Programm miteinbezogen habe, leuchten die LEDs auf einmal nicht mehr. Ich habe bereits ein bisschen herumprobiert und bin daraufgekommen, dass sie sehr wohl funktionieren, BIS ich eine Variable vom Typ "File" erstelle. Ich kann es mir jetzt gar nicht erklären was eine Variable mit der Funktion von LEDs zu tun hat, bzw. bin ich komplett ratlos, wie ich dieses Problem lösen oder umgehen kann(Der Cardreader funktioniert ja...und die LEDs grundsätzlich auch, außer wenn ich die besagte Variable deklariere).

Hier der Code vom Cardreader:
Code: [Select]
void DatenSpeichern()
{
  File myFile;

  //Schreiben
  myFile = SD.open("test.txt", FILE_WRITE);
  if (myFile)
  {
    myFile.println("Test Succeeded.");
    myFile.close();
  }
}


Und der Code der LPD8806:

Code: [Select]
for(int i=0; i<4; i++)
  {
    switch(iTimer[i])   //iTimer...zahl die am i. Segment angezeigt werden soll
    {
      case 0: nulll(i); break;
      case 1: eins(i); break;
      case 2: zwei(i); break;  //zwei(i); ...Methode in der steht, welche LEDs für eine "2" leuchten müssen
      case 3: drei(i); break;  //(i)...auf welches der 4 Segmente die Zahl geschrieben werden soll
      case 4: vier(i); break;
      case 5: fuenf(i); break;
      case 6: sechs(i); break;
      case 7: sieben(i); break;
      case 8: acht(i); break;
      case 9: neun(i); break;
    }
  }
  strip.show();


Im Setup steht außerdem natürlich noch strip.begin(); und SD.begin(10);...aber daran liegt das Problem jedenfalls nicht.


Also sobald ich "File myFile;" weglasse funktionieren die LEDs perfekt...aber der Cardreader natürlich nicht.
Woran liegt das, bzw. wie kann man das umgehen?

Lg

Klaus_ww

Ich tippe auf Doppelbelegung der Pins, aber das sieht man ja leider in Deinem Sketchauszug nicht.
Freizeit-Programmierer mit moderatem Ehrgeiz besseren Code zu schreiben.

Member_001

Ja das hab ich mir auch schon gedacht...aber ich wüsste nicht wo ich eine Doppelbelegung hätte.


LEDs:
Code: [Select]
int dataPin  = 2;
int clockPin = 3;
LPD8806 strip = LPD8806(nLEDs, dataPin, clockPin);


und der Cardreader arbeitet mit dem SPI Protokoll...wobei ich den wählbaren pin auf 10 gelegt habe.

Lg

combie

Also, ich halte das für voll logisch, dass das so ist, wie es ist:

1. Der Fehler ist da, wo du zuletzt suchst.(und da bist du noch nicht)
2. Du zeigst nur die Stellen, wo du den Fehler vermutest.(da ist er aber nicht, denn sonst hättest du ihn schon gefunden)
3. Du musst dich erst noch ein bisschen ausheulen. (bevor es an die konzentrierte Fehlersuche gehen kann)

Also, alles total menschlich!
Irgend wie **** so eine Show hier abzuziehen, aber voll menschlich.

Ich warte also geduldig ab, bis deine Bereitschaft den Fehler zu finden auf ein erfolgversprechendes Niveau gestiegen ist
Wer es kann, der tut es.
Wer es nicht kann, unterrichtet es.
Und, wer gar keine Ahnung hat, bestimmt wo es lang geht.

Member_001

Sorry aber was ist jetzt dein Problem?

Ich habe eine normale Frage gestellt auf die ich mir auch eine normale Antwort erwarte...und der Code den ich oben bereits geschickt habe ist der ganze Code in dem der Fehler liegen könnte, da es sonst keinen relevanten Code gibt.


Aber bitte wenn dir das helfen sollte:

Code: [Select]
void leer(int iT)
{
  for(int i = 0; i < nLEDs; i++)
  {
    strip.setPixelColor(i+42*iT, strip.Color(0,0,0));
  }
}

void nulll(int iT)
{
  for(int i = 0; i < 42; i++)
  {
    strip.setPixelColor(i+42*iT, strip.Color(0,0,0));
    if(ColorRed == true)
    {
      if(i>(-1) && i<18)
      {
        strip.setPixelColor(i+42*iT, strip.Color(127,0,0));
      }
      if(i>23 && i<42)
      {
        strip.setPixelColor(i+42*iT, strip.Color(127,0,0));
      }
    }
    else
    {
      if(i>(-1)&& i<18)
      {
        strip.setPixelColor(i+42*iT, strip.Color(0,0,127));
      }
      if(i>23 && i<42)
      {
        strip.setPixelColor(i+42*iT, strip.Color(0,0,127));
      }
    }
  }
}

void eins(int iT)
{
  for(int i = 0; i < 42; i++)
  {
    strip.setPixelColor(i+42*iT, strip.Color(0,0,0));
    if(ColorRed == true)
    {
      if(i>11 && i<18)
      {
        strip.setPixelColor(i+42*iT, strip.Color(127,0,0));
      }
      if(i>35 && i<42)
      {
        strip.setPixelColor(i+42*iT, strip.Color(127,0,0));
      }
    }
    else
    {
      if(i>11 && i<18)
      {
        strip.setPixelColor(i+42*iT, strip.Color(0,0,127));
      }
      if(i>35 && i<42)
      {
        strip.setPixelColor(i+42*iT, strip.Color(0,0,127));
      }
    }
  }
}

void zwei(int iT)
{
  for(int i = 0; i < 42; i++)
  {
    strip.setPixelColor(i+42*iT, strip.Color(0,0,0));
    if(ColorRed == true)
    {
      if(i>(-1) && i<12)
      {
        strip.setPixelColor(i+42*iT, strip.Color(127,0,0));
      }
      if(i>17 && i<24)
      {
        strip.setPixelColor(i+42*iT, strip.Color(127,0,0));
      }
      if(i>29 && i<42)
      {
        strip.setPixelColor(i+42*iT, strip.Color(127,0,0));
      }
    }   else
    {
      if(i>(-1) && i<12)
      {
        strip.setPixelColor(i+42*iT, strip.Color(0,0,127));
      }
      if(i>17 && i<24)
      {
        strip.setPixelColor(i+42*iT, strip.Color(0,0,127));
      }
      if(i>29 && i<42)
      {
        strip.setPixelColor(i+42*iT, strip.Color(0,0,127));
      }
    }
  }
}

void drei(int iT)
{
  for(int i = 0; i < 42; i++)
  {
    strip.setPixelColor(i+42*iT, strip.Color(0,0,0));
    if(ColorRed == true)
    {
      if(i>29 && i<42)
      {
        strip.setPixelColor(i+42*iT, strip.Color(127,0,0));
      }
      if(i>5 && i<24)
      {
        strip.setPixelColor(i+42*iT, strip.Color(127,0,0));
      }
    }
    else
    {
      if(i>29 && i<42)
      {
        strip.setPixelColor(i+42*iT, strip.Color(0,0,127));
      }
      if(i>5 && i<24)
      {
        strip.setPixelColor(i+42*iT, strip.Color(0,0,127));
      }
    }
  }
}

void vier(int iT)
{
  for(int i = 0; i < 42; i++)
  {
    strip.setPixelColor(i+42*iT, strip.Color(0,0,0));
    if(ColorRed == true)
    {
      if(i>11 && i<30)
      {
        strip.setPixelColor(i+42*iT, strip.Color(127,0,0));
      }
      if(i>35 && i<42)
      {
        strip.setPixelColor(i+42*iT, strip.Color(127,0,0));
      }
    }
    else
    {
      if(i>11 && i<30)
      {
        strip.setPixelColor(i+42*iT, strip.Color(0,0,127));
      }
      if(i>35 && i<42)
      {
        strip.setPixelColor(i+42*iT, strip.Color(0,0,127));
      }
    }
  }
}

void fuenf(int iT)
{
  for(int i = 0; i < 42; i++)
  {
    strip.setPixelColor(i+42*iT, strip.Color(0,0,0));
    if(ColorRed == true)
    {
      if(i>5 && i<36)
      {
        strip.setPixelColor(i+42*iT, strip.Color(127,0,0));
      }
    }
    else
    {
      if(i>5 && i<36)
      {
        strip.setPixelColor(i+42*iT, strip.Color(0,0,127));
      }
    }
  }
}

void sechs(int iT)
{
  for(int i = 0; i < 42; i++)
  {
    strip.setPixelColor(i+42*iT, strip.Color(0,0,0));
    if(ColorRed == true)
    {
      if(i>(-1) && i<36)
      {
        strip.setPixelColor(i+42*iT, strip.Color(127,0,0));
      }
    }
    else
    {
      if(i>(-1) && i<36)
      {
        strip.setPixelColor(i+42*iT, strip.Color(0,0,127));
      }
    }
  }
}

void sieben(int iT)
{
  for(int i = 0; i < 42; i++)
  {
    strip.setPixelColor(i+42*iT, strip.Color(0,0,0));
    if(ColorRed == true)
    {
      if(i>11 && i<18)
      {
        strip.setPixelColor(i+42*iT, strip.Color(127,0,0));
      }
      if(i>29 && i<42)
      {
        strip.setPixelColor(i+42*iT, strip.Color(127,0,0));
      }
    }
    else
    {
      if(i>11 && i<18)
      {
        strip.setPixelColor(i+42*iT, strip.Color(0,0,127));
      }
      if(i>29 && i<42)
      {
        strip.setPixelColor(i+42*iT, strip.Color(0,0,127));
      }
    }
  }
}

void acht(int iT)
{
  for(int i = 0; i < 42; i++)
  {
    if(ColorRed == true)
    {
      strip.setPixelColor(i+42*iT, strip.Color(127,0,0));
    }
    else
    {
      strip.setPixelColor(i+42*iT, strip.Color(0,0,127));
    }
  }
}

void neun(int iT)
{
  for(int i = 0; i < 42; i++)
  {
    strip.setPixelColor(i+42*iT, strip.Color(0,0,0));
    if(ColorRed == true)
    {
      if(i>5 && i<42)
      {
        strip.setPixelColor(i+42*iT, strip.Color(127,0,0));
      }
    }
    else
    {
      if(i>5 && i<42)
      {
        strip.setPixelColor(i+42*iT, strip.Color(0,0,127));
      }
    }
  }
}



Und wie gesagt, ich weiß bereits wo der Fehler liegt...erst wenn ich die Variable vom Typ "File" deklariere, tritt der Fehler auf. Was ich nur nicht weiß ist warum das so ist und wie ich das Problem lösen kann. Wenn du dich damit auskennen würdest, so könntest du -falls es eine Lösung gibt- diese mir bereits presentieren. Oder hast du einfach meine Fragestellung nicht genau genug gelesen und einfach eine random Antwort geschrieben? Dann tut es mit Leid :P

Und welche Show du meinst weiß ich jetzt leider auch nicht. Aber du scheinst halt heute nicht so einen guten Tag zu haben, dann ruh dich lieber aus und schreib erst wieder wenn es dir besser geht - ist eh alles total menschlich!

Wenn es dir dann wieder gut geht bin ich voll und ganz bereit den Fehler auf einem dir passenden Niveau zu finden. Bis dahin werde ich natürlich geduldig warten ;)

Lg

combie

#5
Jan 13, 2018, 11:28 am Last Edit: Jan 13, 2018, 11:28 am by combie
Tipp:
Mit emotionalen Ausbrüchen, wirst du keine technischen Fehler finden!

KABOOM!!!
Wer es kann, der tut es.
Wer es nicht kann, unterrichtet es.
Und, wer gar keine Ahnung hat, bestimmt wo es lang geht.

Member_001

Ich sehe schon du hast einfach keinen Bock mir zu helfen. Ich suche mir wo anders Hilfe >:(

combie

Quote
du hast einfach keinen Bock mir zu helfen.
Da irrst du!

Wenn ich dir nicht helfen wollte, würde ich dir nicht antworten.
Wer es kann, der tut es.
Wer es nicht kann, unterrichtet es.
Und, wer gar keine Ahnung hat, bestimmt wo es lang geht.

michael_x

Oft liegt "der Fehler" nicht in dem,  was du Code nennst. Bei deinem RAM-Speicher Problem liegt der Fehler darin, dass du nur auf ausführbare Anweisungen fixiert bist.

ElEspanol

Ich sehe schon du hast einfach keinen Bock mir zu helfen. Ich suche mir wo anders Hilfe >:(
Du hast bisher weder den Wink mit dem Zaunpfahl nicht gecheckt, noch den konkreten Hinweis zu Problemen mit dem RAM.
Wo ist bisher der KOMPLETTE Sketch?
Der Sd-Karten Puffer benötigt 512 Bytes. Sagt dir das irgendwas?

Go Up