Zwei verschiedene SD-Files in einem Programm lesen und schreiben

Hey alle zusammen ich brauche leider Hilfe :frowning:
ich habe das gesamte Forum durchsucht und leider nichts gefunden :frowning:
Ich brauch zwei verschiedene Text Files in meinem Programm, einmal ein Parameter File aus welchem ich werte lese und diese gegebenenfalls editiere.
Aber ich brauche noch ein zweites File in das ich meine Messwerte schreiben kann, das mit den Parametern Funktioniert wunderbar, allerdings habe ich nun das Problem das es das Messwert.txt nie öffnet.
Ich habe schon Probiert ein neues File zu deklarieren und auch mit dem selben File Deklaration funktioniert es leider nicht.
Das geöffnete File wird immer geschlossen, das habe ich mehrfach gecheckt.
Hat mir jemand einen Tipp was ich machen könnte? oder wie das realisiert werden kann?
vielen Dank und liebe Grüße
Leo

parameter auf
parameter ändern
parameter zu

messwert auf
messwert schreiben
messwert zu

leolausemaus:
Hey alle zusammen ich brauche leider Hilfe :frowning:

Ich habe schon Probiert ein neues File zu deklarieren und auch mit dem selben File Deklaration funktioniert es leider nicht.

Du brauchst Hilfe - aber wie soll Dir denn geholfen werden, wenn Du nicht zeigst, was Du hast, damit man Deinen Code so anpassen kann, das es funktioniert?
Nun must selbst zusehen…

#include "Wire.h"
#include <SD.h>
const uint8_t SDSelect = 4;
void setup()
{
  Serial.begin (115200);
  Serial.println (F ("Start.."));
  if (!SD.begin (SDSelect))
  {
    Serial.println (F ("SD-Card Fehler bei INIT"));
  }
  else
  {
    Serial.println (F ("SD-Card IO"));
  }
}

void loop()
{
  dateischreiben();
  dateilesen();
}

void dateischreiben ()
{
  char sddatei[] = "schreibe.txt";
  File dataFile = SD.open (sddatei, FILE_WRITE);
  if (dataFile)
  {
    dataFile.println (); // schreibe Inhalt
    dataFile.close();
  }
}
void dateilesen()
{
  char sddatei[] = "lese.txt";
  File dataFile = SD.open (sddatei, FILE_READ);
  if (dataFile)
  {
    dataFile.read (); // lese Inhalt
    dataFile.close();
  }
}

Hey du einer,

ist es eigentlich so schwer, bei Fragen richtige und ausreichende Information zu liefern ?

Bedenke doch einfach, wir können nicht wissen was du hast und was du machst.

Vielen Dank für die Antworten,
da es sich um knapp 1000 Programmzeilen handelt wollten ich Ihnen das lesen ersparen, des weiteren kann ich nicht den gesammten Code veröffentlichen aufgrund der Rechte :frowning:
Sorry das ich zu wenig infos geschickt hatte, ich hoffe so ist es etwas besser?

die init und aufrufe sind exakt gleich wie in dem Beispiel weiter unten aus der CS liegt auf 5.

hier werden die Parameter geschrieben:
void writeSD(void)
{
// Die Datei auf die SD-Karte schreiben
//SD.remove(FILENAME);
myFile = SD.open("parameter.txt", FILE_WRITE);
// if the file opened okay, write to it:
if (myFile) {
myFile.seek(0);
Serial.println("Datei bereit zum Schreiben");
myFile.print(Messgeschwindigkeit); myFile.println(" // Messgeschwindigkeit");

myFile.print(Winkel); myFile.println(" // Winkel");
myFile.print(Messabstand); myFile.println(" // Messabstand");
myFile.print(Aufloesung); myFile.println(" // Aufloesung");
myFile.close(); // close the file:
Serial.println("Datei wurde auf SD-Karte erstellt.");
} else {
// if the file didn't open, print an error:
Serial.println("error opening file for writing");
}
myFile.close();
}

hier werden sie gelesen:

void readSD()
{
// re-open the file for reading:
myFile = SD.open(FILENAME);
if (myFile) {
Serial.println("Datei bereit zum Lesen:");
// Bis zum Dateiende zeilenweise auslesen
while (myFile.available()) {
readOneLine();
}
// close the file:
//SD.remove(FILENAME);
myFile.close();

Serial.println("Datei wurde gelesen");
} else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}
}

bis hier funktioniert alles.

dann sollen die messwerte geschrieben werden:
void messwerteSchreiben(void)
{
myFile = SD.open("MesswertAusgabe.txt", FILE_WRITE);
Serial.println("Arrrrrrrschloch");
myFile.print(ADValue);
myFile.print(",");
myFile.close();

}

void headMesswerteSD(void)
{
// myFile.close();
myFile = SD.open("MesswertAusgabe.txt", FILE_WRITE);
if (SD.exists("MesswertAusgabe.txt"))
{
Serial.print("MAusgabe vorhanden");
myFile.println("Parameter der Messung");
myFile.print("Winkel der Messung : ");
myFile.println(Winkel);
myFile.print("Messabstand: ");
myFile.println(Messabstand);
myFile.print("Auflösung: ");
myFile.println(Aufloesung);
myFile.print("Geschwindigkeit: ");
myFile.println(Messgeschwindigkeit);
myFile.close();
}
else
{
Serial.print("AusgabeFile nicht da");
}
myFile.close();
}

da geht garnichts er findet "MesswertAusgabe.txt" nicht.
Muss ich ein neues File deklarieren? oder an was könnten man machen um die zwei Text dokumente einzeln bearbeiten zu können?

leolausemaus:
da geht garnichts er findet "MesswertAusgabe.txt" nicht.

Das war es leider nicht :frowning: aber danke für den Tipp.

Und du hast es auch tatsächlich mit einem kürzeren (max. 8 Zeichen) Dateinamen getestet ?

leolausemaus:
Das war es leider nicht :frowning: aber danke für den Tipp.

DOCH!
Ich hab mir erlaubt, das was Du zusammengezimmert hast wenigstens zu hinzubekommen, das in jeder Funktion eine vernünftige Fehlermeldung rauskommt.

Oder wie erklärst Du Dir den Unsinn:
// if the file didn’t open, print an error:
Serial.println(“error opening test.txt”);

#include "Wire.h"
#include <SD.h>
const uint8_t SDSelect = 4;


uint8_t Winkel, Messabstand, Aufloesung, Messgeschwindigkeit = 0;

void setup()
{
  Serial.begin (115200);
  Serial.println (F ("Start.."));
  if (!SD.begin (SDSelect))
  {
    Serial.println (F ("SD-Card Fehler bei INIT"));
  }
  else
  {
    Serial.println (F ("SD-Card IO"));
  }
}


void loop()
{
  writeSD();
  readSD();
  messwerteSchreiben();
  headMesswerteSD();
  while (1);
}

void writeSD (void)
{
  // Die Datei auf die SD-Karte schreiben
  //char filename[] = "parameter.txt";
  char filename[] = "para.txt";
  File myFile = SD.open (filename, FILE_WRITE);
  // if the file opened okay, write to it:
  if (myFile)
  {
    myFile.seek (0);
    Serial.println ("Datei bereit zum Schreiben");
    myFile.print (Messgeschwindigkeit);
    myFile.println (" // Messgeschwindigkeit");
    myFile.print (Winkel);
    myFile.println (" // Winkel");
    myFile.print (Messabstand);
    myFile.println (" // Messabstand");
    myFile.print (Aufloesung);
    myFile.println (" // Aufloesung");
    myFile.close(); // close the file:
    Serial.println ("Datei wurde auf SD-Karte erstellt.");
  }
  else
  {
    // if the file didn't open, print an error:
    Serial.print ("error opening ");
    Serial.println (filename);
  }
  myFile.close();
}

void readSD()
{
  // re-open the file for reading:
  //  char filename[] = "parameter.txt";
  char filename[] = "para.txt";
  File myFile = SD.open (filename, FILE_READ);
  if (myFile)
  {
    Serial.println ("Datei bereit zum Lesen:");
    // Bis zum Dateiende zeilenweise auslesen
    /*
      while (myFile.available())
      {
            readOneLine();
      }
    */
    // close the file:
    //SD.remove(FILENAME);
    myFile.close();
    Serial.println ("Datei wurde gelesen");
  }
  else
  {
    // if the file didn't open, print an error:
    Serial.print ("error opening ");
    Serial.println (filename);
  }
}

// Ab hier geht nichts
void messwerteSchreiben (void)
{
  // char filename[] = "MesswertAusgabe.txt";
  char filename[] = "mess.txt";
  uint8_t ADValue = 0;
  File myFile = SD.open (filename, FILE_WRITE);
  Serial.println ("Arrrrrrrschloch");
  myFile.print (ADValue);
  myFile.print (",");
  myFile.close();
}

void headMesswerteSD (void)
{
  // myFile.close();
  // char filename[] = "MesswertAusgabe.txt";
  char filename[] = "mess.txt";
  File myFile = SD.open (filename, FILE_WRITE);
  if (SD.exists (filename))
  {
    Serial.print ("MAusgabe vorhanden");
    myFile.println ("Parameter der Messung");
    myFile.print ("Winkel der Messung :  ");
    myFile.println (Winkel);
    myFile.print ("Messabstand:  ");
    myFile.println (Messabstand);
    myFile.print ("Auflösung:   ");
    myFile.println (Aufloesung);
    myFile.print ("Geschwindigkeit:  ");
    myFile.println (Messgeschwindigkeit);
    myFile.close();
  }
  else
  {
    Serial.print ("error opening ");
    Serial.println (filename);
  }
  myFile.close();
}
Start..
14:02:23.552 -> SD-Card IO
14:02:23.552 -> Datei bereit zum Schreiben
14:02:23.585 -> Datei wurde auf SD-Karte erstellt.
14:02:23.585 -> Datei bereit zum Lesen:
14:02:23.585 -> Datei wurde gelesen
14:02:23.585 -> Arrrrrrrschloch
14:02:23.618 -> MAusgabe vorhanden