lit un fichier de paramétrage sur un support (SD) inspiration : https://skyduino.wordpress.com/2012/06/19/arduino-charger-un-fichier-de-configuration-depuis-une-carte-sd/ void readSDSettings() { /* Déclare le buffer qui stockera une ligne du fichier, ainsi que les deux pointeurs key et value */ char buffer[BUFFER_SIZE], *key, *value; /* Déclare l'itérateur et le compteur de lignes */ byte i, buffer_lenght, line_counter = 0; /* Ouvre le fichier de configuration */ File config_file = sd.open("param.cfg", FILE_READ); if(!config_file) { // Gère les erreurs DBG_OUTPUT_PORT.println("Erreur d'ouverture du fichier /param.cfg !"); //for(;;); } else { /* Tant que non fin de fichier */ while(config_file.available() > 0 ){ /* Récupère une ligne entière dans le buffer */ i = 0; while((buffer[i++] = config_file.read()) != '\n') { /* Si la ligne dépasse la taille du buffer */ if(i == BUFFER_SIZE) { /* On finit de lire la ligne mais sans stocker les données */ while(config_file.read() != '\n'); break; // Et on arrête la lecture de cette ligne } } /* On garde de côté le nombre de char stocké dans le buffer */ buffer_lenght = i; /* Gestion des lignes trop grande */ if(i == BUFFER_SIZE) { DBG_OUTPUT_PORT.println("Ligne trop longue à la ligne "); DBG_OUTPUT_PORT.println(line_counter, DEC); DBG_OUTPUT_PORT.println(i); } /* Finalise la chaine de caractéres ASCIIZ en supprimant le \n au passage */ buffer[--i] = '\0'; /* Incrémente le compteur de lignes */ ++line_counter; /* Ignore les lignes vides ou les lignes de commentaires */ if(buffer[0] == '\0' || buffer[0] == '#') continue; /* Cherche l'emplacement de la clef en ignorant les espaces et les tabulations en début de ligne */ i = 0; while(buffer[i] == ' ' || buffer[i] == '\t') { if(++i == buffer_lenght) break; // Ignore les lignes contenant uniquement des espaces et/ou des tabulations } if(i == buffer_lenght) continue; // Gère les lignes contenant uniquement des espaces et/ou des tabulations key = &buffer[i]; /* Cherche l'emplacement du séparateur = en ignorant les espaces et les tabulations âpres la clef */ while(buffer[i] != '=') { /* Ignore les espaces et les tabulations */ if(buffer[i] == ' ' || buffer[i] == '\t') buffer[i] = '\0'; if(++i == buffer_lenght) { DBG_OUTPUT_PORT.println("Ligne mal forme a la ligne "); DBG_OUTPUT_PORT.println(line_counter, DEC); break; // Ignore les lignes mal formé } } if(i == buffer_lenght) continue; // Gère les lignes mal formé /* Transforme le séparateur = en \0 et continue */ buffer[i++] = '\0'; /* Cherche l'emplacement de la valeur en ignorant les espaces et les tabulations âpres le séparateur */ while(buffer[i] == ' ' || buffer[i] == '\t') { if(++i == buffer_lenght) { DBG_OUTPUT_PORT.println("Ligne mal forme a la ligne "); DBG_OUTPUT_PORT.println(line_counter, DEC); break; // Ignore les lignes mal formé } } if(i == buffer_lenght) continue; // Gère les lignes mal formé value = &buffer[i]; /* Transforme les données texte en valeur utilisable */ if(strcmp(key, "ssid") == 0) { ssid=""; strcpy(ssid,value); DBG_OUTPUT_PORT.println(ssid); } else if(strcmp(key, "hostname") == 0) { strcpy(nom,value); DBG_OUTPUT_PORT.println(nom); } else if(strcmp(key, "password") == 0) { strcpy(password,value); DBG_OUTPUT_PORT.println(password); } else if(strcmp(key, "sdgpio") == 0) { SDGPIO=atoi(value); DBG_OUTPUT_PORT.println(SDGPIO); } else if(strcmp(key, "IPC") == 0) { IPC=atoi(value); DBG_OUTPUT_PORT.println(IPC); } else if(strcmp(key, "IPD") == 0) { IPD=atoi(value); DBG_OUTPUT_PORT.println(IPD); } else if(strcmp(key, "modifpass") == 0) { strcpy(modifpass,value); DBG_OUTPUT_PORT.println(modifpass); } else { // Default Serial.print("Clef inconnu "); Serial.println(key); } } /* Ferme le fichier de configuration */ config_file.close(); } }