Datei auf SD Karte lesen und in Int Werte umwandeln.

Guten Tag zusammen,

Eine Anfängerfrage zum Lesen einer SD Karte. Das Problem ist nicht, dass ich zu diesem Thema nichts finde, sondern so viel, dass ich ein wenig überfordert bin, wie ich da am besten ran gehe. Hier und auch in anderen Foren gibt es dazu hunderte Threads.

Ich benutze die standard Sd Lib von Arduino und kann auf meine Karte Werte schreiben und lesen.

Zu beginn meines Programms lese ich aus der SD Karte die config File "config.txt"

Dort sind im Moment 4 kommagetrennte Werte drin, die ich im Programm als int verwenden will.

50,50,75,100,20

Mit:

conf = SD.open("config.txt");
if (conf) 
{
Serial.println("config.txt:");
// read from the file until there's nothing else in it:
while (conf.available()) {
Serial.write(conf.read());
}
// close the file:
conf.close();
Serial.println(conf);

lese ich die Datei ein. Das klappt. Jetzt stehe ich auf dem Schlauch, wie ich diese 4 Werte aus dem Sting in 4 int´s stopfe. Dachte an sowas.

char delimiter[] = ",";
char *ptr;
ptr = strtok(conf, delimiter);  // <-- Hier meckert er.

while(ptr != NULL) 
{
        i++
        int number[i] = atoi(ptr);   //<--- vermutlich totaler quatsch
        ptr = strtok(NULL, delimiter);
}
}

Aber das geht leider nicht, evtl bin ich ja ganz auf dem Holzweg. Ich hab das immer noch nicht ganz verstanden wie man mit den Stings umgehen muss. Jetzt meckert er irgendwas mit char* und char.... Ich will nur die 4 Werte als int haben, das kann doch nicht so schwer sein?

Vielen Dank!!

Hallo,

vielleicht hilft Dir das weiter.

http://forum.arduino.cc/index.php/topic,172094.0.html
oder

Ist conf() eine Datei? Das geht natürlich nicht. Das muss ein Null-terminierter String sein wenn es strtrok() sein soll.

Außerdem darfst den Index erst nach der Verwendung inkrementieren:

number[i++] = atoi(ptr);

Und i muss außerhalb der Schleife natürlich deklariert und mit 0 initialisiert werden

TEC_MICHL:
Dort sind im Moment 4 kommagetrennte Werte drin, die ich im Programm als int verwenden will.
50,50,75,100,20

Bei mir sind das 5 Werte, aber da bin ich vermutlich gerade am Erbsenzählen.