Go Down

Topic: Date sur fichiers SD (Read 1 time) previous topic - next topic

Voilelec

Mar 26, 2012, 12:13 pm Last Edit: Mar 26, 2012, 02:07 pm by Voilelec Reason: 1
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 :
Code: [Select]
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

Code: [Select]

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


B@tto

Premier problème : quelle erreur as-tu à la compilation ?
Sinon as-tu essayé en utilisant un tableau de char plutot qu'une string ?
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

Voilelec

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 !

B@tto

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);
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

al1fch

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

Voilelec

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

Amicalement.


Go Up