Werte von SD-Karte ausgeben

Hallo
Ich habe ein Problem beim auslesen meiner Werte auf der SD-Karte.
Ich habe in meiner Textdatei 4 Werte stehen und möchte den ersten und dritten Wert und den zweiten und vierten Wert in jeweils anderen Funktionen verarbeiten.
Ich bekomme in meinem Programm allerdings immer nur den ersten Wert.
Es ist bestimmt nur ein Befehl der bei mir fehlt, aber ich weiß einfach nicht weiter…
Ich hoffe mir kann jemand weiter helfen.

Gruß, Mina

testsd_karte.ino (784 Bytes)

Stelle Deinen Sketch bitte direkt hier ein. Benutze dazu Codetags (</> oben links im Forumseditor).
Dann wäre es auch sinnvoll, ein Beispiel der Textdatei hier vorzustellen.

Gruß Tommy

Hier der Code von “testsd_karte.ino”:

#include <SPI.h>
#include <SD.h>
#define AB "text.txt"
#include "SdFat.h"
File myFile;

int x = 0;
char y[5];
int c ;

void setup() {
  Serial.begin(9600);
  Serial.print("Initializing SD card...");
  pinMode(10, OUTPUT);
   
  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  else {
    Serial.println("initialization done.");
    myFile = SD.open(AB);
  } 
  if (myFile) {
    Serial.println("Datei bereit zum Lesen:");
    for ( c = 0; c < 4; c++) {
      y[c]= myFile.read();
      x = atoi(y);
      Serial.print("a=");
      Serial.println(x);
      //seek(3*c);
    
    }
  } 
  else {
    Serial.println("error opening text.txt");
  }

  //one line
  myFile.close();
}

void loop() {
  // put your main code here, to run repeatedly:
}

Frage: Wie sehen die Daten auf der SD-Karte aus?

#include <SD.h>
...
#include "SdFat.h"

Da kommen mir Zweifel, ob Du das so willst. Eigentlich eher die eine oder die andere Bibliothek.

y[c]= myFile.read();

Liest genau ein Zeichen, keine Zeile.

Tommy56:
Dann wäre es auch sinnvoll, ein Beispiel der Textdatei hier vorzustellen.

Auf jeden Fall :slight_smile:

Meine Werte sind einfach erstmal nur 1

1
2
3
4

Untereinander geschrieben.
Und lesen tut das Programm immer nur die 1.

Schau Dir Deine Datei mal in einem HEX-Editor an. Da stehen noch Zeilenvorschübe drin, die auch gelesen werden wollen.

Gruß Tommy

Ok das habe ich jetzt gemacht, aber ich weiß nicht genau, was er mir da ausspuckt...

31 32 3B 0D 0A 33 3B 0D 0A 35 3B 12;..3;..5;

Und in meiner Textdatei steht:

12;
3;
5;

Kann mir da jetzt jemand weiterhelfen?

Schau dir die ASCII Tabelle an

Generell liest man bei sowas die nicht-Steuerzeichen Zeichen für Zeichen ein bis man das Endzeichen hat (Strichpunkt oder Linefeed je nach Anordnung). Und wendet dann eine Konvertierungsfunktion auf den String an.

Tommy56:
Schau Dir Deine Datei mal in einem HEX-Editor an. Da stehen noch Zeilenvorschübe drin, die auch gelesen werden wollen.

Ok das habe ich jetzt gemacht, aber ich weiß nicht genau, was er mir da ausspuckt...

31 32 3B 0D 0A 33 3B 0D 0A 35 3B 12;..3;..5;

Wenn dir das zu kompliziert ist, probier mal die Funktion parseInt.

...
  if (myFile) {
    char msg[3] = "a=";
    Serial.println("Datei bereit zum Lesen:");
    while (myFile.available() ) {
      int x = myFile.parseInt();
      Serial.print(msg); Serial.println(x);
      (msg[0])++;  // a -> b -> c ... 
    }
    myFile.close();
  } 
  else {
    Serial.println("error opening text.txt");
  }

Danke michael_x
ich werds morgen mal pobieren