Pour un projet j'utilise l'arduino nano pour enregistré des données sur une carte sd, jusque la tout marche correctement !
Cependant à chaque allumage de mon montage celui-ci crée un nouveau fichier sur la carte sd cependant quelque fois mon programme réécrit sur un fichier existant...
Je voudrais donc créer un nom de fichiers ou il y a pas de chance ou très peu que celui éxiste ...
Pour cela je pensais à creer un nom de fichier en partie aléatoire, pour cela j'ai utilisé le programme suivant :
char fileName[20];
long Numfile = random(1,1000);
//unsigned int Numfile = randnumber + Nbfile;
sprintf(fileName,"/mesure%d.txt",Numfile);
Serial.println("fichiers " + String(fileName) + " cree !");
// ouverture du fichier
file = SD.open(fileName, FILE_WRITE); // ouvre le fichier en écriture
file.seek(file.size()); // positionnement à la fin du fichier
file.println(" debut programme " );
file.close(); // ferme le fichier
Serial.println("fichiers " + String(fileName) + " cree !");
Cependant, le nombre aléatoire donné est toujours le même, et j’ouvre donc toujours le même fichier :
jym92:
Si vous savez pourquoi cela ne fonctionne pas, je suis preneur !
Bonjour
Parce que le generateur aleatoire est en fait un generateur pseudo aleatoire
si tu n'utilise pas les AD (un suffit)
tu peux ajouter un randomseed
voir ça
En effet random génère toujours la même séquence.
Il faut l'initialiser avec randomSeed() pour avoir une autre séquence
Si tu as un dateur tu peux composer le nom de fichier avec la date et l'heure
Dateur: en anglais RTC (real time clock). C'est un composant externe qui permet d'avoir le date et l'heure sur l'arduino.
Les plus utilisés pour l'arduino sont le DS1307 et le DS3231
Après avoir réussi à générer des noms de fichiers aléatoire, je me suis rendu compte que ceux-ci comporter la même date de création .
Hors mon système fonctionne de manière autonome, je n'ai donc aucun moyen de savoir quel est le dernier fichier enregistré lorsque je récupère ma carte sd...
De plus par manque de place, il est impossible pour moi d'ajouter un dateur.
J'ai donc pensé à créer un deuxième fichier texte, qui lui ne contiendrait que le numéro du dernier fichier enregistré !
Voila comment je m'y prends :
File file; // création d'un objet SdFile pour le fichier utilisé
File Namefile; // création d'un objet SdFile pour le répertoire racine
int old_filenumber = 0;
Namefile = SD.open("/name.txt");
if (Namefile)
{
while (Namefile.available())
{
//Serial.println("le dernier nom de fichier etait : " + String(Namefile.read()) + " !");
old_filenumber =int(Namefile.read());
Namefile.close();
}
}
else
{
old_filenumber = 1;
Namefile.close();
}
Namefile = SD.open("/name.txt");
int filenumber = old_filenumber + 1;
char str_filenumber[6];
dtostrf(filenumber, 4, 0, str_filenumber);
Namefile.println(str_filenumber);
Namefile.close();
char fileName[15];
sprintf(fileName,"/mesure%s.txt",str_filenumber);
Serial.println("fichiers " + String(fileName) + " cree !");
// ouverture du fichier
file = SD.open(fileName, FILE_WRITE); // ouvre le fichier en écriture
file.seek(file.size()); // positionnement à la fin du fichier
file.println(" debut programme " );
file.close(); // ferme le fichier
Mais comme vous vous en doutez cela ne fonctionne pas et ne trouve ou n'écrit jamais dans le fichier name.txt et il me génère toujours le fichier mesure2.txt ...