Très bonnes indications !
Justement je vais priofiter de ton cours pour rebondir. La mauvaise habitude que j'ai eu avec les String m'est resté
Honte à moi !
Donc vers quelle type de variable s'orienté au niveau du final ?
Je demande car e viens de changer un peu la donne. En fait je vais me permettre de simplifier un peu tout ça.
Mon vichier va évoluer comme suit:
//Modèle
Robot Go//Type
Robot//Mix_V1V2 / Mix_V3V4
true
false
Par contre, au retour j'obtiens:
Robot Go
Robot
fals
false
Il manque un true et j'obtiens un false incomplet qui prends la place du true ![]()
Au niveau code quelques changements pour essayer. Tant que j'en suis à tester, autant que je teste toutes les solutions avant de me jetter dans une version finale.
#define SIZE_CONF 10 //Nombre de configuration par fichier
File myFile; //Fichier
String tblFicMdle[SIZE_MODELE]; //Le tableau des noms des fichiers modèles
String tblFicSvg[SIZE_MODELE]; //Le tableau des noms des fichiers de sauvegardes
int nbFichierMdle; //Nombre de fichier
/* SETUP */
void setup() {
//Initialiser la carte SD
if(initSD()) {
//Lister les fichier de sauvegardes
listeFichier("/svgde/");
//Lister les fichiers de configuration modèle
nbFichierMdle = listeFichier("/modeles/");
//Ouvrir le fichier de sauvegarde
//ouvrirFichier("/svgde/", tblFicSvg[0]);
ouvrirFichier("/modeles/", tblFicMdle[2]);
}
}
else {
//Charger les valeurs par défaut de la radio
}
/* FONCTION listerFichier() */
int listeFichier(String chemin) {
int count = 0;
char path[SIZE_BUFFER];
//Conversion du chemin
chemin.toCharArray(path, SIZE_BUFFER);
//Ouvre ce qui est défini par le chemin
myFile = SD.open(path);
//Tant que c'est vrai
while(true) {
//Prend le nom du fichier
File entry = myFile.openNextFile();
//Si c'est la fin
if(!entry) {
break; //Sortir de la boucle
}
//Si le nombre de fichier est plus important que le nombre de place en tableau
if(count == SIZE_MODELE) {
break; //Sortir de la boucle
}
//Si c'est le répertoire /modeles/
if(chemin == "/modeles/") {
//Rentre le nom de fichier dans le tableau des noms de modèles
tblFicMdle[count] = entry.name();
}
//Si c'est le répertoire /sauvegarde/
if(chemin == "/svgde/") {
//Rentre le nom de fichier dans le tableau des noms de sauvegarde
tblFicSvg[count] = entry.name();
}
count++; //Compter le nombre de fichier
}
//Fermer le fichier
myFile.close();
//Retourner le nombre de fichier
return count;
}
/* FONCTION qui ouvre un fichier */
void ouvrirFichier(String chemin, String fic) {
//Variables
char path[SIZE_BUFFER], bufferConf[SIZE_BUFFER];
int i, bufferLenght, lineCounter = 0;
String toto[SIZE_CONF];
clearLcd(); //Efface l'écran
ecrireLcd("Fichier en lecture", 01); //Ecrire
//Crée le chemin
chemin = chemin + fic;
//Transforme le chemin
chemin.toCharArray(path, SIZE_BUFFER);
//Ouvre le fichier
myFile = SD.open(path, FILE_READ);
//Si le fichier est présent
if(myFile) {
//Tant que ce n'est pas la fin du fichier
while(myFile.available()) {
//Récupère la ligne
i = 0;
while((bufferConf[i++] = myFile.read()) != '\n') {
//Si la ligne dépasse le buffer
if(i == SIZE_BUFFER) {
//Finir la ligne et stopper la lecture
while(myFile.read() != '\n') {
break;
}
}
}
bufferLenght = i; //Garder en mémoire le nombre de lettre
bufferConf[--i] = '\0'; //Finir la ligne en retirant le saut de ligne
//Serial.println(bufferConf[0]);
//Ne pas enregistrer les lignes vides ou les commentaires
if(bufferConf[0] == '\0' || bufferConf[0] == '/' || bufferConf[0] == '#') {
continue;
}
toto[lineCounter] = bufferConf;
++lineCounter; //Compter le nombre de lignes
}
Serial.println(path);
Serial.println(toto[0]);
Serial.println(toto[1]);
Serial.println(toto[2]);
Serial.println(toto[3]);
Serial.println(toto[4]);
Serial.println(toto[5]);
Serial.println(lineCounter);
}
else {
clearLcd(); //Efface l'écran
ecrireLcd("Fichier introuvable", 01); //Ecrire
for(;;);
}
//Fermer le fichier
myFile.close();
ecrireLcd("Fichier Ok", 01); //Ecrire
delay(1000);
}
Comme on le voie, si j'ai un commentaire, on saute, si j'ai un saut de ligne on saute.
Ne pas tenir compte de la sortie car je demande plus haut vers quoi je devrais évolué pour ne pas forcément utilisé un String ![]()
Merci.