Modifications

Sauter à la navigation Sauter à la recherche
9 091 octets ajoutés ,  12 janvier 2014 à 20:51
aucun résumé de modification
Ligne 1 : Ligne 1 :  
{{ADF-MICROSD-BREAKOUT-NAV}}
 
{{ADF-MICROSD-BREAKOUT-NAV}}
   −
{{traduction}}
+
== Ecriture de fichiers ==
 +
Le sketch suivant est une démonstration de base d'écriture dans un fichier.
 +
 
 +
C'est la méthode utilisée habituellement pour enregistrer des données.
 +
 
 +
<nowiki>#include <SD.h>
 +
 
 +
File myFile;
 +
 
 +
void setup()
 +
{
 +
  Serial.begin(9600);
 +
  Serial.print("Initializing SD card...");
 +
// Sur la platine Ethernet, CS est la broche 4. Elle est définie comme une sortie par défaut.
 +
// Notez que même que si elle n'est pas utilisée comme broche CS, la broche SS
 +
// (10 sur la plupart des cartes Arduino, 53 sur les Méga) doit être laissée comme une sortie
 +
// ou les fonctions de la bibliothèque SD ne fonctionneront pas.
 +
  pinMode(10, OUTPUT);
 +
 
 +
  if (!SD.begin(10)) {
 +
    Serial.println("initialization failed!");
 +
    return;
 +
  }
 +
  Serial.println("initialization done.");
 +
 
 +
// Ouvrir le fichier. notez qu'un seul fichier peut être ouvert à la fois,
 +
// Il faut donc fermer celui-ci avant d'en ouvrir une autre.
 +
  myFile = SD.open("test.txt", FILE_WRITE);
 +
 
 +
  // Si le fichier s'est ouvert : nous pouvons y écrire
 +
  if (myFile) {
 +
    Serial.print("Writing to test.txt...");
 +
    myFile.println("testing 1, 2, 3.");
 +
        // fermer le fichier :
 +
    myFile.close();
 +
    Serial.println("done.");
 +
  } else {
 +
    // Si le fichier ne s'ouvre pas, afficher une erreur :
 +
    Serial.println("error opening test.txt");
 +
  }
 +
}
 +
 
 +
void loop()
 +
{
 +
        // Il n'y a rien à faire ici, après setup()
 +
}
 +
</nowiki>
 +
 
 +
Lorsque vous l'exécuterez, vous devriez voir ceci:
 +
 
 +
{{ADFImage|ADF-MICROSD-BREAKOUT-Func00.jpg}}
 +
 
 +
Vous pouvez ensuite ouvrir le fichier à l'aide de votre système d'exploitation en insérant la carte dans le slot ad hoc de votre PC. Vous verrez une ligne pour chaque fois que le sketch aura été exécuté. C'est-à-dire que le sketch '''ajoute''' dans le fichier, et qu'il n'écrase pas le contenu.
 +
 
 +
{{ADFImage|ADF-MICROSD-BREAKOUT-Func01.jpg}}
 +
 
 +
Certains point sont à relever :
 +
 
 +
* Vous pouvez avoir plusieurs fichiers ouverts en même temps, et y écrire comme vous le souhaitez.
 +
* Vous pouvez utiliser '''print''' et '''println()''' comme des commandes du port série (Serial), pour écrire des chaînes de caractères (string), des variables, etc
 +
* Vous devez fermer '''close()''' le(s) fichier(s) lorsque vous avez terminé pour s'assurer que toutes les données sont écrites de façon permanente!(vider les buffer)
 +
* Vous pouvez ouvrir des fichiers dans un répertoire. Par exemple, si vous voulez ouvrir un fichier dans le répertoire comme '''/MesFichiers/exemple.txt''' vous pouvez appeler '''SD.open("/MesFichiers/exemple.txt")''' (indique le chemin complet).
 +
 
 +
{{ambox | text = La bibliothèque de la carte SD ne prend pas en charge les "noms de fichiers longs" tels que nous sommes habitués à les utiliser. Au lieu de cela, la librairie utilise le format DOS 8.3 pour les noms de fichiers. Vous devez donc utilisez exclusivement des noms de fichier courts! Par exemple '''IMAGE.JPG''' est très bien, et '''datalog.txt''' est aussi très bien mais pas '''My GPS log file.text'''!
 +
 
 +
Gardez à l'esprit que les noms de fichier courts ne sont pas sensibles à la case ("not case sensitive"), de sorte '''datalog.txt''' est le même fichier que '''DataLog.Txt''' et idem pour le fichier '''DATALOG.TXT''' }}
 +
 
 +
== Lecture de fichiers ==
 +
Ensuite, nous allons vous montrer comment lire un fichier, c'est une opération très similaire à l'écriture. Pour la réaliser, nous utiliserons '''SD.open()''' pour ouvrir le fichier mais cette fois on ne passe pas le paramètre '''FILE_WRITE''' durant l'appel. Cela évitera d'écrire accidentellement dans le fichier (car il sera ouvert en lecture seule). Vous pouvez alors appeler la fonction '''available()''' (elle indique s'il reste des données à lire) et un '''read()''' sur le fichier (pour lire l'octet suivant).
 +
 
 +
<nowiki>#include <SD.h>
 +
 
 +
File myFile;
 +
 
 +
void setup()
 +
{
 +
  Serial.begin(9600);
 +
  Serial.print("Initializing SD card...");
 +
  // Sur la platine Ethernet, CS est la broche 4. Elle est définie comme une sortie par défaut.
 +
  // Notez que même si elle n'est pas utilisée comme broche CS, la broche SS
 +
  // (10 sur la plupart des cartes Arduino, 53 sur les Méga) doit être laissée comme une sortie
 +
  // sinon les fonctions de la bibliothèque SD ne fonctionneront pas.
 +
  pinMode(10, OUTPUT);
 +
 
 +
  if (!SD.begin(10)) {
 +
    Serial.println("initialization failed!");
 +
    return;
 +
  }
 +
  Serial.println("initialization done.");
 +
 
 +
  // ouvrir le fichier pour la lecture :
 +
  myFile = SD.open("test.txt");
 +
  if (myFile) {
 +
    Serial.println("test.txt:");
 +
 
 +
    // lire le fichier jusqu'à la fin :
 +
    while (myFile.available()) {
 +
        Serial.write(myFile.read());
 +
    }
 +
    // fermer le fichier :
 +
    myFile.close();
 +
  } else {
 +
    // si le fichier ne se ferme pas, afficher une erreur :
 +
    Serial.println("error opening test.txt");
 +
  }
 +
}
 +
 
 +
void loop()
 +
{
 +
        // Il n'y a rien à faire après setup()
 +
}</nowiki>
 +
 
 +
 
 +
Certaines éléments sont à noter:
 +
* Vous pouvez avoir plusieurs fichiers ouverts en même temps, et lire à partir de chacun d'eux comme vous le souhaitez.
 +
* La fonction '''read()''' retourne un seul octet à la fois. Elle ne lit pas une ligne complète ou un nombre!
 +
* Vous devez fermer le(s) fichier(s) avec la fonction '''close()''' lorsque vous avez terminé pour réduire la quantité de RAM utilisée
 +
 
 +
{{ambox-stop | text = La bibliothèque de la carte SD ne prend pas en charge les «noms de fichiers longs» tels que nous sommes habitués. Au lieu de cela, il utilise le format DOS 8.3 pour les noms de fichiers, donc n'utilisez que les noms de fichiers courts! Par exemple '''IMAGE.JPG''' est très bien, et '''datalog.txt''' est aussi très bien mais pas '''My GPS log file.text'''!
 +
 
 +
Garder à l'esprit que les noms de fichiers courts ne sont pas sensibles à la case (not case sensitive), de sorte '''datalog.txt''' est le même fichier que '''DataLog.Txt''' et idem pour le fichier '''DATALOG.TXT'''}}
 +
 
 +
== Enumérer / lire récursivement  les fichiers ==
 +
Le dernier exemple nous montre une utilisation plus avancée. Un besoin courant est, par exemple, énumération tous les fichiers de la carte SD ou de jouer les fichiers musicaux les un après les autres. Dans la dernière version de la bibliothèque SD, vous pouvez parcourir un répertoire et appeler '''openNextFile()''' pour obtenir et ouvrir le fichier suivant disponible dans le répertoire. Ils n’apparaîtront pas dans l'ordre alphabétique, mais dans l'ordre de leur création; souvenez vous en car cela est important!
 +
 
 +
Pour voir l'exemple, chargez et exécutez le sketch d'exemple '''SD→listfiles'''
 +
 
 +
Vous pouvez constater que nous avons un sous-répertoire '''ANIM''' (des fichiers d'animation y sont placés). Les chiffres à la suite des noms de fichier représentent la taille en octets des fichiers.
 +
 
 +
Ce sketch est utile pour découvrir les noms de fichiers tels qu'ils sont stockés sur votre carte. Le sketch montre également comment manipuler le(s) répertoire(s)
 +
 
 +
{{ADFImage|ADF-MICROSD-BREAKOUT-Func02.jpg}}
 +
 
 +
== Autres fonctions utiles ==
 +
Quelques manipulations utiles sont possibles avec des fonctions '''SD''', nous allons en énumérer quelques-unes ici:
 +
 
 +
* Si vous voulez juste vérifier l'existence d'un fichier, utilisez '''SD.exists("filename.txt")''' elle retournera vrai ou faux (1 ou 0)
 +
* Vous pouvez supprimer un fichier en appelant '''SD.remove("unwanted.txt")''' - attention! Elle supprimera vraiment le fichier, et il n'y a pas de "poubelle" pour corriger une erreur.
 +
* Vous pouvez créer un sous-répertoire en appelant '''SD.mkdir("/mynewdir")''' très pratique lorsque vous voulez rassembler des fichiers dans un emplacement commun (un fichier par jour... et un répertoire par semaine). Rien ne se passe si il existe déjà, mais vous pouvez toujours appeler '''SD.exists()''' en premier tel que décrit ci-dessus.
 +
 
 +
Quelques fonctions utiles pour manipuler des fichiers :
 +
 
 +
* Vous pouvez appeler '''seek()''' sur un fichier. Ceci déplacera le pointeur de lecture/écriture vers le nouvel emplacement indiqué. Par exemple '''seek(0)''' vous amène au début du fichier, ce qui peut être très pratique!
 +
* De même, vous pouvez appeler la fonction '''position()''' elle renvoi l'emplacement actuel du pointeur de lecture/écriture dans le fichier (nombre d'octets parcourus).
 +
* Si vous voulez connaître la taille d'un fichier, appelez '''size()''' pour obtenir la taille du fichier en octets (bytes).
 +
* Les répertoires/dossiers sont des fichiers spéciaux, vous pouvez déterminer si un fichier est un répertoire en appelant '''isDirectory()'''
 +
* Lorsqu'un répertoire est reconnu, vous pouvez commencer à énumerer tous les fichiers disponibles dans ce répertoire en appelant '''openNextFile()'''
 +
* S'il est nécessaire de connaître le nom d'un fichier (par exemple lorsque vous avez appelé '''openNextFile()''') dans un répertoire. Dans ce cas, la fonction '''name()''' retourne un pointeur vers le tableau de caractères contenant le nom de fichier au format 8.3. Vous pouvez envoyer directement le contenu du tableau directement sur la console avec '''Serial.print()'''.
    
{{ADF-MICROSD-BREAKOUT-TRAILER}}
 
{{ADF-MICROSD-BREAKOUT-TRAILER}}
29 917

modifications

Menu de navigation