ADF-MICROSD-BREAKOUT-Fonctions

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche

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.