Différences entre versions de « ADF-MICROSD-BREAKOUT-Fonctions »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
Ligne 2 : Ligne 2 :
  
 
== Lecture de fichiers ==
 
== Lecture de fichiers ==
Le sketch suivant est une démonstration de base d'écriture dans un fichier. C'est la façon habituelle pour enregistrer des données.
+
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>
 
  <nowiki>#include <SD.h>
Ligne 28 : Ligne 30 :
 
   myFile = SD.open("test.txt", FILE_WRITE);
 
   myFile = SD.open("test.txt", FILE_WRITE);
  
   // Si le fichier s'est ouvert : nous pouvont y écrire
+
   // Si le fichier s'est ouvert : nous pouvons y écrire
 
   if (myFile) {
 
   if (myFile) {
 
     Serial.print("Writing to test.txt...");
 
     Serial.print("Writing to test.txt...");
Ligne 47 : Ligne 49 :
 
</nowiki>
 
</nowiki>
  
Lorsque vous l'exécuterez, vous devriez voir ce qui suit:
+
Lorsque vous l'exécuterez, vous devriez voir ceci:
  
 
[[Fichier:ADF-MICROSD-BREAKOUT-Func00.jpg]]
 
[[Fichier: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 est exécuté. C'est-à-dire, qu'il '''ajoute''' dans le fichier, et qu'il n'écrase pas le contenu.
+
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.
  
 
[[Fichier:ADF-MICROSD-BREAKOUT-Func01.jpg]]
 
[[Fichier:ADF-MICROSD-BREAKOUT-Func01.jpg]]
  
Certaines choses sont à noter :
+
Certains point sont à relever :
  
 
* Vous pouvez avoir plusieurs fichiers ouverts en même temps, et y écrire comme vous le souhaitez.
 
* 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 en série, écrire des chaînes, des variables, etc
+
* 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 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).
 
* 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. 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'''!
+
{{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 fichiers courts ne sont pas sensibles à la case «case sensitive», de sorte '''datalog.txt''' est le même fichier que '''DataLog.Txt''' et idem pour le fichier '''DATALOG.TXT''' }}
+
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 ==
 
== Lecture de fichiers ==

Version du 26 février 2013 à 21:16

Lecture 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.

#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()
}

Lorsque vous l'exécuterez, vous devriez voir ceci:

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.

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).

Lecture de fichiers

Ensuite, nous allons vous montrer comment lire un fichier, c'est très similaire à l'écriture, pour cela, nous utiliserons SD.open() pour ouvrir le fichier mais cette fois on ne passe pas le paramètre FILE_WRITE cela nous gardera d'écrire accidentellement dans le fichier (ouverture en lecture seule). Vous pouvez alors appeler la fonction available() (elle vous indiquera s'il reste des données à lire) et un read() sur le fichier vous renverra l'octet suivant.

#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
// 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 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()
}


Certaines choses sont à noter:

  • Vous pouvez avoir plusieurs fichiers ouverts en même temps, et lire à partir de chacun d'eux comme vous le souhaitez.
  • read() retourne un seul octet à la fois. Elle ne lit pas une ligne complète ou un nombre!
  • Vous devez close() le(s) fichier(s) lorsque vous avez terminé pour réduire la quantité de RAM utilisée

Enumérer / lire récursivement les fichiers

Le dernier exemple nous montre une utilisation plus avancée. Une demande courante est par exemple de vouloir énumérer tous les fichiers de la carte SD, ou de jouer un fichier musical ou autre. Dans la dernière version de la bibliothèque SD, vous pouvez parcourir un répertoire et appeler openNextFile() pour obtenir le fichier disponible suivant. Ils n’apparaîtront pas dans l'ordre alphabétique, mais dans l'ordre de leur création; ayez conscience de ce fait!

Pour le voir, exécutez le sketch d'exemple SD→listfiles

Vous pouvez voir que nous avons un sous-répertoire ANIM (des fichiers d'animation y sont). Les chiffres à la suite des noms de fichier sont la taille en octets des fichiers. Ce sketch est utile pour apprendre comment sont appelés les fichiers sur votre carte. Le sketch montre également comment manipuler le(s) répertoire(s)

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 qu'un fichier existe, 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. Rien ne se passe si il existe déjà, mais vous pouvez toujours appeler SD.exists() en premier comme ci-dessus.

Quelques fonctions de fichier utiles pour les manipuler :

  • Vous pouvez appeler seek() sur un fichier. Ceci déplacera le pointeur de lecture/écriture vers un nouvel emplacement. 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 vous renverra où vous en êtes dans le fichier (nombre d'octets parcourus).
  • Si vous voulez connaître la taille d'un fichier, appelez size() pour obtenir sa dimension en nombre d'octets dans le fichier.
  • 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 à passer par tous les fichiers dans ce répertoire en appelant openNextFile()
  • S'il est nécessaire de connaître le nom d'un fichier, par exemple si vous avez appelé openNextFile() dans un répertoire. Dans ce cas, la fonction name() retourne un pointeur vers le tableau de caractères au format

8.3, vous pouvez l'envoyer directement à la console avec Serial.print() si vous voulez.


Source: Micro SD card Tutorial created by LadyAda for AdaFruit Industries

Réalisé avec l'aide de Mr Carette J. à qui nous remettons tous nos remerciements.

Tutoriel créé par LadyAda pour AdaFruit Industries. Tutorial created by LadyAda for AdaFruit Industries

Traduit avec l'autorisation d'AdaFruit Industries - Translated with the permission from Adafruit Industries - www.adafruit.com

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.