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