Date sur fichiers SD

Date sur fichiers SD

Bonjour les Arduinotes.
Je travaille sur un programme de dataloger qui crée des fichiers Excel sur SD Ram
Le nom du fichier est créé à partir des informations données par l'horloge temps réel (PCF 8583)
Pour faire simple, le principe est :

nowValue  =  (long) (clock.minute + (60  *  clock.hour) + (60 *24 * clock.day) + (60 *24 *31 *  clock.month )) + (60 *24 *31 * 12 * (clock.year%10) )) ;  // 5 402 879 maximum

Ce chiffre obtenu est unique pour chaque minute, récurrence 10 ans.

à partir de ce nombre je crée le nom du fichier en 5 lettres majuscules, exemple :
AAAAA.xls pour le premier janvier année 2xx0, à 0h0min
DRWOT.xls pour le 23/03/2012 10:00
C'est simple en décomposant le nombre en puissances de 24

nowValue  = ( clock.minute  + (60 *clock.hour) + (1440 *(long) clock.day) + (44640 * (long) clock.month ) + (535680 *(long)  (clock.year%10) )) ; 
// Long avoid overflow error calculations when resut is more than 2 exp 15 (32768)
Serial.println  (nowValue);
// Maximum  for nowValue = 5 402 879   //  Maximum for unsigned long  = 2 exponent 32 = 4 294 967 296 )  
// 24 exponent 5 = about 8 millions : nowValue can be coded with only 5 capitalised alphabetic caracters form : ABCYZ
for (int xx=0 ; xx<5; xx++)
      {
      nowValueIndex[xx] = nowValue %24 ; 
      Serial.println  ( nowValueIndex[xx]  );
      nowValue = nowValue / 24 ;
      }
// Create string for the 5 characters of name
for (int xx=4 ; xx>=0; xx--)
     {
       fileName = fileName +char ('A' + nowValueIndex[xx]) ;
     //         fileName = fileName +char ('A' + xx) ; // For test, write EDCBA
     }

Mais alors deux problèmes différents apparaissent !

///////////////////////////////////
Premier problème : Utiliser ce nom de fichier en variable
///////////////////////////////////

La syntaxe de base fonctionne évidement bien : dataFile = SD.open("b1234567.xls" , FILE_WRITE);

Mais, en utilisant fileName comme défini précédemment en String, cela de fonctionne pas, ni même plus simplement
String fileName = "c1234567.xls" ;
dataFile = SD.open(fileName, FILE_WRITE);

L'erreur de compilation est alors : no matching function for call to 'SDClass::open(String, int)'

Quelle est l'astuce pour faire accepter la variable String ?

////////////////////////////////
Deuxième problème : Dater le fichier lors de l'écriture
///////////////////////////////////

Sur la SD, les fichiers créés apparaissent avec date vide :

B1234567.XLS 2000-01-01 01:00:00 0
Je cherche évidement à utiliser les données de l'horloge pour les dater correctement

Une idée ?

/////////////////

Merci d'avance pour vos lumières

Premier problème : quelle erreur as-tu à la compilation ?
Sinon as-tu essayé en utilisant un tableau de char plutot qu'une string ?

Merci B@tto pour ta réponse

String fileName = "c1234567.xls" ;
dataFile = SD.open(fileName, FILE_WRITE);

L'erreur de compilation est alors : no matching function for call to 'SDClass::open(String, int)'

Il me semblait plus simple de passer le nom en String comme prévu dans la bibliothèque !

Oui mais le type string n'existait pas il y a peu, c'était un tableau de char, et il est possible que la librairie n'ait pas évoluée avec. Essaye avec :

char fileName[] = "1234567.xls" ;
dataFile = SD.open(fileName, FILE_WRITE);

Bonjour
La 'datation' des fichiers est prise en charge par une librairie (sdfatlib) plus aboutie que celle , basique, qui 'vient' avec Arduino :
http://code.google.com/p/sdfatlib/
voir l'exemple SdFatTimestamp.pde dans le dossier /extras

Merci à tous les deux pour cette aide pertinente qui m'enlève deux épines du pied...

Amicalement.