Von SD lesen liefert irgendwie quatsch

Hallo @all,
vielleicht weiß jemand Rat.
Ich habe auf SD ein file, das ich in einen String einlesen möchte.
Inhalt sind 160 Zeichen, je 8 zahlen und 8 Buchstabenpaare hintereinander:

SUPERDAD00000000SUPERDAD00000000SUPERDAD00000000SUPERDAD00000000SUPERDAD00000000SUPERDAD00000000SUPERDAD00000000SUPERDAD00000000SUPERDAD00000000SUPERDAD00000000

Hier meine Lese-Funktion:

 File highscoreFile = SD.open("highscor.txt");
  if(highscoreFile){
    while(highscoreFile.available()){
      //arrayOfChars[159] = highscoreFile.read();
      ScoresString.concat(highscoreFile.read());
    }
    //ScoresString.concat(arrayOfChars[159]);
    highscoreFile.close();
    Serial.print(F("Debug: highscorestring:"));
    Serial.print(ScoresString);
    Serial.print(F("\n"));
    for (int i=0;i<10;i++){
      tmpName=ScoresString.substring(i*8,i*8+8);
      tmpScore=ScoresString.substring(i*8+8,i*8+8);
      scoreList[i]=tmpScore.toInt();
      if (tmpMin < scoreList[i] ){
       tmpMin=scoreList[i]; // aktualisiere den schlechtesten Wert
      }
      Serial.print(i);
      Serial.print(F(". Spielername:"));
      Serial.print(tmpName);
      Serial.print(F(". Punkte:"));
      Serial.print(tmpScore);
      Serial.print(F("\n"));
    }

Seltsamerweise liefert die mir aber quatsch zurück:

Debug: highscorestring:83858069826865684848484848484848838580698268656848484848484848488385806982686568484848484848484883858069826865684848484848484848838580698268656848484848484848488385806982686568484848484848484883858069826865684848484848484848838580698268656848484848484848488385806982686568484848484848484883858069826865684848484848484848131083858069826865684848484848484848838580698268656848484848484848488385806982686568484848484848484883858069826865684848484848484848838580698268656848484848
0. Spielername:83858069. Punkte:
1. Spielername:82686568. Punkte:
2. Spielername:48484848. Punkte:
3. Spielername:48484848. Punkte:
4. Spielername:83858069. Punkte:
5. Spielername:82686568. Punkte:
6. Spielername:48484848. Punkte:
7. Spielername:48484848. Punkte:
8. Spielername:83858069. Punkte:
9. Spielername:82686568. Punkte:
Schlechtester Wert:0Count Score:4
Spieler verdient Patz in der Highscoreliste:Aktualisiere Highscores auf SD

Initialisiert ist die SD natürlich, und der Inhalt der highscor.txt wurde mit sd erfolgreich geschrieben (und geschlossen).

ScoresString ist vermutlich ein String ?

Vermutlich sind es 160 Strings, wenn du jedesmal einen Buchstaben anfügst.

Beim letzten Zeichen hast du einen String mit 159 Buchstaben und legst einen neuen mit 160 Zeichen an.
Das allein sind mehr als 320 Byte RAM. Die SD Library braucht die Hälfte des beim Uno vorhandenen RAM (2k).

Welche Hardware verwendest du?
Warum verwendest du String - Objekte?
Warum liest du die ganze Datei ein, bevor du etwas damit machst?
Warum machst du das überhaupt? (Ist ja normalerweise nur als Hilfsmittel für etwas ganz anderes gedacht)

Aus diesen Fragen kannst du dir eventuell "Rat" und Tips selbst ausdenken.

Danke Michael,

möchte highscores von sd laden (array).
Hab mir behelfen können:

// read score-chart from sd
File highscoreFile = SD.open("highscor.txt");
if(highscoreFile){
while(highscoreFile.available()){
character=highscoreFile.read();
ScoresString.concat(character);
}
highscoreFile.close();
....
....

Ich sehe keine Verbesserung ...

  • nun sind zwei Variable undefiniert
  • code tags fehlen diesmal

Wenn ducharacteralsintdefiniert hast, hast du den gleichen "irgendwie Quatsch" wie vorher. Alsbyteodercharist es nicht ganz so schlimm.
Aber es wäre wirklich schlecht, wenn du damit durchkämst und auch noch zufrieden bist.

Ein Blick in die ASCII-Tabelle zur Inspiration:

S  U  P  E  R
83 85 80 69 82