Lecture des éléments d'un fichier .ini
sur une carte SD
// ----------------------------------- // Lecture de fichier ini sur carte SD // Sur MEGA Port 53 // ----------------------------------- #include <SPI.h> #include <SD.h> //byte finligne=0x0D; char finligne='\n'; char carlu; String maligne; int age; // Tableaux des informations du fichier INI (50 parametres) String IniCle[50]; String IniVal[50]; int NbrCle; // -------------- // Initialisation // -------------- void setup() { // Ouverture du port serie Serial.begin(9600); Serial.println("Ouverture SD card..."); // Ouverture carte SD pinMode(53, OUTPUT); if (!SD.begin(4)) { Serial.println("Echec ouverture Carte SD ..."); return; } Serial.println("Carte SD Prete ..."); // Chargement du fichier ini IniCharge(); // Monitoring des tableaux de parametres for (int i=0; i<NbrCle; i++) { Serial.print(IniCle[i]); Serial.print('\t'); Serial.println(IniVal[i]); } // Pour tester, on demande la clé "Age" du fichier Serial.println(IniDonneValeurAlpha("Age")); age=IniDonneValeurNum("Age"); Serial.println(age); } // ---------- // Traitement // ---------- void loop() { }// ----------------------------------------------------------------------------- // Chargement du fichier (Obligatoirement une constante dans le sd.open, domage) // Charge 2 tableaux ( à définir dans le code principal) : // IniCle : Liste des clés du fichier ini // IniVal : Liste des valeurs des clés // Une fois ce traitement effectué, la valeur des clées peut etre retrouvée avec la fonction IniDonnevaleur(Nomdelacle) // ------------------------------------------------------------------------------ void IniCharge() { // Variables de travail File MonFichier; // Ouverture du fichier MonFichier = SD.open("test.ini", FILE_READ); // Si le fichier est ouvert, on le lit if (MonFichier) { // Boucle de traitement du fichier while (MonFichier.available()) { // Lecture du caractere suivant carlu=MonFichier.read(); // Si le caractere lu est une fin de ligne, on traite la ligne if (carlu==finligne) { // Traitement de la ligne lue IniTraiteLigne(); maligne=""; } // sinon, on continue à alimenter la ligne else maligne+=carlu; } // On traite la derniere ligne constituée IniTraiteLigne(); // Fermeture du fichier MonFichier.close(); Serial.println("Fichier ferme"); } else { // Le fichier n'a pas été ouvert Serial.println("Erreur ouverture du fichier test.ini"); } }// ----------------------------------------------------------- // Renvoie la valeur d'une clé du fichier .ini lu précédement // En entrée : Nom de la clé recherchée // En sortie valeur de cette clé // ----------------------------------------------------------- String IniDonneValeurAlpha(String _Cle) { for (int i=0; i<NbrCle; i++) { if (IniCle[i]==_Cle) return IniVal[i]; } return ""; }// ----------------------------------------------------------- // Renvoie la valeur d'une clé du fichier .ini lu précédement // En entrée : Nom de la clé recherchée, type de sortie désirée // En sortie valeur de cette clé // ----------------------------------------------------------- int IniDonneValeurNum(String _Cle) { for (int i=0; i<NbrCle; i++) { if (IniCle[i]==_Cle) { String myString = IniVal[i]; int myStringLength = myString.length()+1; char myChar[myStringLength]; myString.toCharArray(myChar,myStringLength); return atoi(myChar); } } }// ---------------------- // Traitement d'une ligne // ---------------------- void IniTraiteLigne() { // On remplace les tabulations dans la ligne par des blancs maligne.replace('\t',' '); // On supprime les blancs non significatifs en début et fin de ligne maligne.trim(); // On ignore les lignes à vide ou les commentaires (# ou //) if (maligne=="" || maligne.startsWith("#") || maligne.startsWith("//")) { maligne=""; return; } // on ajoute la clé et la valeur dans le tableau IniCle[NbrCle]=maligne.substring(0,maligne.indexOf('=')); IniVal[NbrCle]=maligne.substring(maligne.indexOf('=')+1); NbrCle++; // On incrémente l'index APRES car le tableau commence à 0 ... }
Très bien excellent, dommage que rien ne soit prévu pour créer un fichier ini, mais c'est une bonne base pour en créer.
RépondreSupprimerMerci beaucoup pour le partage, car il est vrai que des sites (ou blog) en Français sont assez rares.