SD Card Shield Mehrere Daten erstellen

Hallo !

Ich hätte eine Frage und zwar ich würde gerne eine Text Datei auf meine SD Karte schreiben, möchte aber das wenn eine test.txt Datei schon vorhanden ist das eine neue erstellt wird mit z.B einer Zahl dahinter wie test1.txt und nicht die alte gelöscht / überschrieben wird.

#include <SD.h>
#include <SPI.h>

File myFile;

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

  Serial.println("Initializing the SD Card...");

  if(!SD.begin(53)){
    Serial.println("Initialization failed!!!");
    return;
  }
  Serial.println("Initialzation complete");

}

void loop() {
  myFile = SD.open("test.txt", FILE_WRITE);
  if (myFile)
  {
    myFile.println("Test");
    Serial.println("Test");
    myFile.close();
  }
  else
  {
    Serial.println("Error in opening the file");
  }
  delay(3000);    
}

Hättet ihr da vielleicht eine Lösung dafür ?

LG

Speedcore016:
Hättet ihr da vielleicht eine Lösung dafür ?

Du bildest eine for-Schleife, in der Du alle möglichen Dateinamen bildest und daraufhin prüfst, ob die Datei auf SD-Karte existiert oder nicht:
test0001.txt
test0002.txt
test0003.txt
u.s.w.

Sobald Du in der Schleife feststellst, dass die Datei nicht existiert, springst Du per "break;" aus der Schleife heraus und verwendest diesen Dateinamen.

Wenn alle möglichen Dateinamen bereits belegt sind, mußt Du Dir überlegen, was Du dann machen möchtest: Entweder abbrechen mit Fehlermeldung. Oder dann immer jedesmal test9999.txt verwenden.

Achtung: Die Aufnahmekapazität für Dateinamen im Root-Verzeichnis eines FAT-Datenträgers ist meines Erachtens nach beschränkt. Also wenn Du sehr viele Dateien zu speichern hast, dann möglichst in ein Unterverzeichnis auf dem Datenträger speichern.

Okay das hört sich etwas zu komplex für mich an hättest du vielleicht einen Code der mir dabei helfen könnte ?

LG

Speedcore016:
Okay das hört sich etwas zu komplex für mich an hättest du vielleicht einen Code der mir dabei helfen könnte ?

Beispielfunktion, ungetestet:

char* createNextFilename()
{
  static char fn[13];
  for (int i=1;i<=99;i++)
  {
    snprintf(fn,sizeof(fn),"test%04d.txt",i);
    if (!SD.exists(fn)) return fn;
  }
  return NULL;
}

Die Beispielfunktion ermittelt die erste Datei zwischen “test0001.txt” und “test0099.txt”, die auf der SD-Karte NICHT vorhanden ist, und liefert den Dateinamen zurück. Falls alle Dateinamen in diesem Bereich bereits existieren, wird ein ein Nullstring zurückgeliefert.

Vielen Danke dafür aber ich habe damit trotzdem noch ein paar Probleme mit Fehlermeldungen:

Hier der Code:

#include <SD.h>
#include <SPI.h>

File myFile;

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

  Serial.println("Initializing the SD Card...");

  if(!SD.begin(53)){
    Serial.println("Initialization failed!!!");
    return;
  }
  Serial.println("Initialzation complete");
  
}

void loop() {
  {
  char* createNextFilename()
    static char fn[13];
    for (int i=1;i<=99;i++)
    {
    snprintf(fn,sizeof(fn),"test%04d.txt",i);
    if (!SD.exists(fn)) return fn;
    }
  return NULL;
  }
  
  myFile = SD.open(fn, FILE_WRITE);
  if (myFile)
  {
    myFile.println("Test");
    Serial.println("Test");
    myFile.close();
  }
  else
  {
    Serial.println("Error in opening the file");
  }
  delay(3000);    
}

Mit folgenden Fehlermeldungen:

sketch_jan11b.ino: In function 'void loop()':
sketch_jan11b.ino:32:5: error: expected initializer before 'static'
sketch_jan11b.ino:35:14: error: 'fn' was not declared in this scope
sketch_jan11b.ino:36:32: error: return-statement with a value, in function returning 'void' [-fpermissive]
In file included from /Arduino/hardware/tools/avr/avr/include/avr/eeprom.h:560:0,
                 from C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino/USBAPI.h:25,
                 from C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:224,
                 from C:\Program Files\Arduino\libraries\SD\src/SD.h:18,
                 from sketch_jan11b.ino:1:
sketch_jan11b.ino:38:10: error: return-statement with a value, in function returning 'void' [-fpermissive]
sketch_jan11b.ino:41:20: error: 'fn' was not declared in this scope
Error compiling.

LG

Speedcore016:
Vielen Danke dafür aber ich habe damit trotzdem noch ein paar Probleme mit Fehlermeldungen:

Lerne Grundlagen der C-Programmierung!

Zu Deinen Fehlermeldungen:

  1. Beachte, dass zu jeder öffnenden Codeblockklammer '{' auch eine dazu passende schließende Codeblockklammer '}' vorhanden sein muss!

  2. Versuche nicht, die Funktion createNextFilename() innerhalb des Codes der loop() Funktion reinzuwürgen!