SDFAT Dateiname mit Zeitstempel erstellen

Hallo

Ich habe einen Datenlogger der jedes mal wenn er neu gestartet wird eine neue Datei erstellt, bzw. momentan erweitert er einfach die Alte. Da ich deshalb immer die Datensätze auswerten muss um diese zeitlich einordnen zu können hab ich mir gedacht ich könnte jedes mal eine Datei mit Zeitstempel erstellen. Der eingebaute GPS empfänger hat glaub ich eine RTC, jedenfalls kommt da immer die Zeit an.. Weshalb ich mit hilfe dieser gerne den Zeitstempel erstellen möchte.
Nun mein Problem, wie kann ich mit sdfat den dateinamen als char array angeben?
Also
char dateiname[10];
file.open(dateiname, O CREAT......);
?
mfg

Achtung - Halbwissen!

Ich hatte das gleiche Problem, habs nach viel lesen und probieren und sehr viel Hilfe aus dem Forum hingekriegt, ohne im Detail noch wissen wie.

es gibt in der sd.h eine Funktion dateTimeCallback(), die das Datum setzt, wenn du dir vorher eine Funktion dateTime() schreibst.

ich habe ein Testfile in meiner Bastelkiste gefunden:

#include <SD.h>
#include <Wire.h>
#include <DS1307new.h>





const int chipSelect = 53;

void setup()
{
  Serial.begin(57600);
  pinMode(53, OUTPUT);
  Wire.begin();
  
  // setzt die date time callback function
  SdFile::dateTimeCallback(dateTime); 
  
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }
  Serial.println("card initialized.");
  
  
  
  String dataString = "Dieser Text steht jetzt in der Datei.";
  
  File dataFile = SD.open("datalog5.txt", FILE_WRITE);
  dataFile.println(dataString);
  dataFile.close();
}

void loop()
{
  RTC.getTime();
  Serial.print(RTC.day,DEC);Serial.print(".");
  Serial.print(RTC.month,DEC);Serial.print(".");
  Serial.print(RTC.year,DEC);Serial.print("    ");
  Serial.print(RTC.hour);Serial.print(":");
  Serial.print(RTC.minute);Serial.print(":");  
  Serial.print(RTC.second);Serial.println();
  delay(1000);
}




//------------------------------------------------------------------------------
// call back for datei timestamps
void dateTime(uint16_t* date, uint16_t* time) {
  RTC.getTime();

  // return date using FAT_DATE macro to format fields
  *date = FAT_DATE(RTC.year, RTC.month, RTC.day);

  // return time using FAT_TIME macro to format fields
  *time = FAT_TIME(RTC.hour, RTC.minute, RTC.second);
 
}


//------------------------------------------------------------------------------

Es funktioniert, frage mich aber nicht wie.

Edit:
gefunden: http://forum.arduino.cc/index.php?topic=163229.0

Edit 2:
Nach genauerem Lesen deines Beitrages merkte ich, dass das garnicht deine Frage war. :-[

Nun fühle ich mich doch in der Verantwortung dir eine Antwort auf deine Frage zu geben zu versuchen.

o5i_:
Nun mein Problem, wie kann ich mit sdfat den dateinamen als char array angeben?

der Dateiname IST ein Array!

Ich erzeuge mir meinen Dateinamen so:

snprintf (Dateiname,sizeof(Dateiname),“L%02d%02d%02d_.txt”, RTC.year-2000,RTC.month,RTC.day);
while (SD.exists(Dateiname) && i<26) { // muss durch die passende Funktion der SDFAT.lib ersetzt erden
Dateiname[7]=char(97 + i++);
}

Erzeugt einen Dateinamen “Lyymmdd_.txt”
Wenn der Dateiname schon existiert, weil an einem Tag 2 Logfiles geschrieben werden, dann wird der name mit “a”, “b”, “c” etc an der letzten Stelle geändert.

(und, zusätzlich, mit der Funktion von oben die Datei auch mit dem Richtigen Zeitstempel versehen)

Hallo,

wenn ich aushelfen darf. Ich mach das so. Die zu übergebenden Variablen zum zusammensetzen kannste ja ändern. Ich erstelle damit .csv Dateien für einen Tag. Es dürfen nur nicht mehr als 8 Zeichen sein. Wegen dem FAT Format. Die Dateiendung kannste auch ändern. Gleichzeitg wird in der neuen Datei eine Kopfzeile angelegt.
Nach einem Rest an einem Tag wird in der alten Datei ,falls vorhanden, weitergeschrieben.
Du brauchst natürlich noch eine Funktion, die Dir mittels RTC oder GPS auslesen immer wieder den aktuellen _SD_Dateiname zusammenbaut.

//global
char _SD_Dateiname[13];           // aktueller Dateiname, "_Jahr+_Monat+_Tag.txt", Bsp. 20140719
int _Tag, _Monat, _Jahr;  

--------------------------------------

void refresh_SD_Dateiname ()
{
  static char old_SD_Dateiname[13];
  snprintf_P(_SD_Dateiname,13, PSTR("%04d%02d%02d.csv"), _Jahr, _Monat, _Tag);  // spart etwas RAM
  if (strcmp(old_SD_Dateiname, _SD_Dateiname) != 0)  {  // wenn der char array Vergleich "ungleich" ergibt, dann
    strcpy(old_SD_Dateiname, _SD_Dateiname);            // setze old_SD... mit _SD_Dateiname gleich    
    if (!SD.exists(_SD_Dateiname))  {   // prüfe dessen Existens, wenn Datei nicht vorhanden, erstelle sie und ...
      myFile = SD.open(_SD_Dateiname, FILE_WRITE);   // erzeuge Kopfzeile in der neuen Datei
      myFile.print(F("Datum ; Zeit ;"));             // mit zwei Spalten für Excel
      myFile.close();     
    }  
  }
}