Bonjour,
dans mon programme je voudrai enregistrer les valeurs toutes les X secondes au format csv dans la carte SD.
La partie écriture en CSV ne me cause pas de problème mais c'est plutôt l’écriture dans le fichier de la carte SD qui me bloque.
Lors du démarrage dans le setup j'arrive à créer un fichier dans la carte avec une première ligne puis dans la boucle loop une seconde ligne.
Mon problème est que je n'arrive pas à écrire de 3eme ligne, la fonction "Enregistrement_carte_SD" fonctionne car je vois les valeur dans le moniteur mais pas de 3eme ligne.
J'ai mis pinMode(10,OUTPUT); digitalWrite(10,HIGH); dans la fonction car dans mon programme je désactive la carte SD pour accéder à ma page HTML.
Si quelqu'un a une idée du problème, merci d'avance pour son aide.
Mon setup:
void setup() {
//----initialise connexion série
Serial.begin(9600);
//***************** initialisation de la carte SD **************************************
Serial.println("Initialisation de la SD card...");
pinMode(10,OUTPUT);
digitalWrite(10,HIGH); // Active la carte SD
test=SD.begin(brocheSDCardSelect); // initialisation de la carte SD avec broche 4 en tant que CS - renvoie true/false
if (test!=true) { // si initialisation n'est pas réussie
Serial.println("Echec initialisation!"); // message port Série
}
else { // si initialisation réussie
Serial.println("Initialisation reussie !"); // message port Série
//----- affiche le contenu du répertoire
root = SD.open("/"); // ouvre la SD Card à la racine
Serial.println("Repertoire racine ouvert !");
if(root)
{
if(SD.exists("test.txt"))//Teste si le fichier est présent dans la carte SD
{
int EvoNomFichier = 1; //Valeur permettant d’incrémenter le nom du fichier
sprintf(fileName,"%04s%02d%04s","test_",EvoNomFichier,".txt"); // %d pour un int
if (SD.exists(fileName)) //Teste si le nouveau nom existe
{
while (SD.exists(fileName)) //Tant que le fichier existe dans la SD on l’incrémente
{
EvoNomFichier ++;
sprintf(fileName,"%04s%02d%04s","test_",EvoNomFichier,".txt"); // %d pour un int %s pour un string c'est un tableau
}//Fin de la boucle While
file = SD.open(fileName, FILE_WRITE); // ouvre le fichier en écriture
FileOK= true;
}
else // Pas de nouveau fichier donc on le créer.
{
file = SD.open(fileName, FILE_WRITE); // ouvre le fichier en écriture
Serial.println(fileName);
FileOK= true;
}
}
else
{
file = SD.open("test.txt", FILE_WRITE); // ouvre le fichier en écriture
sprintf(fileName,"%04s%04s","test",".txt");
FileOK= true;
}
file.println("test ecriture");
file.close(); // ferme le fichier
Serial.println("Fin enregistrement !");
Serial.println("Fermeture fichier !");
delay(500);
}
} //Fin initialisation réussie
}
Le loop
void loop()
{
//*********************Recup de L'heure dans le DS1307 **************
RTC.get(rtc,true); // set the RTC
Heure = rtc[2];
Minute = rtc[1];
Serial.print(Heure);
Serial.print(":");
Serial.println(Minute);
///////////////////////// TOUTE LES xx MINUTES ///////////////////////////////////
if (root)
{
Serial.println(DelaisRecSondes);
if(DelaisRecSondes>= 58)
{
DelaisRecSondes=0;
}
if (Minute> DelaisRecSondes+1)
{
Enregistrement_carte_SD();
}
else
{
pinMode(4, OUTPUT); //Active le W5100
EcritureSD = false;
}
}
delay(2000);
}
La fonction:
void Enregistrement_carte_SD()
{
pinMode(10,OUTPUT);
digitalWrite(10,HIGH); // Active la carte SD
Serial.print("fileName = ");
Serial.println(fileName); //contrôle du nom de fichier(pour le debug)
file = SD.open(fileName, FILE_WRITE); //ouverture en écriture du fichier
n_Valeur_Mesure ++ //incrémentation de la valeur à écrire
file.println(n_Valeur_Mesure); //Ecriture de la valeur
file.println(); //saut de ligne
file.close(); // Fermeture du fichier
Serial.println(n_Valeur_Mesure); //Contrôle valeur (pour débogage)
DelaisRecSondes = Minute; //Incrémentation pour boucle dans le Loop
}