Von SD-Karte Komma getrennte Werte in verschiedene Variablen einlesen

Hallo Leute,

ich habe diese Werte als .txt Datei auf der SD-Karte:

  0.000000 ;   0.587759 ;  -0.256313 ;  -0.260647 ;  -0.093224 ;  -0.195787 ;  -9.930157
  0.010000 ;  -0.071264 ;  -0.018506 ;   0.774013 ;   0.080251 ;  -0.486344 ;  -9.915776
  0.020000 ;   0.082807 ;  -0.166837 ;  -0.124259 ;  -0.305346 ;  -0.468850 ;  -9.858902
  0.030000 ;  -0.268074 ;   0.500416 ;  -0.710785 ;   0.131093 ;  -0.463167 ;  -9.819186
  0.040000 ;   0.834082 ;   0.269191 ;   0.032760 ;  -0.223208 ;  -0.659480 ; -10.068884

Diese möchte ich einlesen und Zeile für Zeile jeweils sieben Variablen zuordnen.
Sprich:

  1. Alle sieben Werte der ersten Zeile den jeweils sieben Variablen zuordnen.
  2. Diese sieben Werte in void loop einmal verarbeiten
  3. Alle sieben Werte der zweiten Zeile neu den sieben Variablen zuordnen und die alten überschreiben.
  4. Diese wieder verarbeiten usw....

Wäre sehr dankbar für Hilfe! :confused:

Danke!

Warum beginnst Du dafür ein neues Thema? Du hast doch in Deinem anderen Thread bereits Hinweise dazu bekommen, wie Du das machen kannst.
Ich würde an Deiner Stelle nicht 7 einzelvariablen, sondern ein Array nutzen.

Gruß Tommy

Sorry, dachte das ist ein allgemeines Problem...

Ja bekomme es aber leider nicht richtig hin, wäre dankbar für ein Beispiel

Gruß Chris

Du hast bereits im anderen Thread Hinweise auf strtok bekommen und die Lib SdFat. Warum liest Du Dich nicht in die Grundlagen ein und baust Deine Lösung schrittweise auf, sondern wartest, dass jemand Deinen Sketch schreibt?

Gruß Tommy

Ja das weiß ich.
ich finde leider nur nirgends passende Infos bzw. Beispiele

In der Lib sind Beispiele dabei. Fange damit an. Lesen musst Du aber schon selbst. Du lernst nichts, wenn wir Dir alles vorkauen.

Gruß Tommy

Danke für die Hilfe…
Verbringe bereits zwei Tage damit…

Erwarte nicht immer ein Beispiel genau zu deiner Anwendung! Programme ergeben sich daraus dass man Teile zusammensetzt. Dann reicht ein Beispiel wie man eine Zeile einliest. Und eins wie man einen String splittet und konvertiert. Zerlege dein Problem in Teil-Aufgaben und löse das Schritt für Schritt

#include <SD.h>

const byte NUM_VALUES = 7;

float values[NUM_VALUES];
File file;

void setup()
{  
  Serial.begin(9600);
  SD.begin();

  file = SD.open("Test.txt", FILE_READ);

  getData();

  Serial.println("Ende");
  file.close();
}

void loop()
{
}

void getData()
{
  while (char* buffer = getLine())  //solange machen wie Zeilen da sind
  {
    byte index = 0;
    char* ptr = strtok(buffer, ";");
    while (ptr != NULL && index < NUM_VALUES)
    {
      values[index++] = atof(ptr);
      ptr = strtok(NULL, ";");
    }

    for (byte i = 0; i < index; i++)
    {
      Serial.print(values[i], 6);
      Serial.print(" ; ");
    }
    Serial.println();
  }
}

char* getLine()
{
  static char buffer[90];
  static byte index;

  while (file.available())
  {
    char c = file.read();

    if (c == '\n')   //Zeilenende erreicht
    {
      buffer[index] = '\0';
      index = 0;
      return buffer;
    }
    else if (c >= 32 && index < sizeof(buffer) - 1)
    {
      buffer[index++] = c;
    }
  }

  return NULL;
}

Kann man auch speicher-schonender machen wenn man nur immer einen Wert statt die ganze Zeile einliest. Aber das ist etwas komplizierter