Les cartes SD

Accueil/Les cartes SD
Les cartes SD 2016-12-20T11:38:33+00:00

Project Description

L’Arduino offre la posibilité de lire et d’écrire des fichiers sur une carte SD, il faut cependant lui brancher un shield ayant ce fameux lecteur. Mais après cela, il vous sera facile de créer par exemple une station de capteur qui enregistre ses résultats pendant quelques jours et pouvoir récuperer toutes les données après. Bref les possibilités sont grandes et bien pratiques. Assez dit, on commence.

 

Préparation

sd shield web

 

Voilà le matériel dont vous aurez besoin pour suivre ce tutoriel:

 

Les branchements

Il vous faut en premier lieu connecter votre shield à votre carte Arduino, ces branchement varient en fonction des différents shield et des différentes carte. Si vous possédez un shield classique qui vient se brancher directement sur l’Arduino (pensez à vérifier la compatibilitée au moment de l’achat)  alors pas de soucis, branchez le normalement puis trouvez ensuite le pin Cs dans la documentation du shield, ce numéro nous servira pour la programmation. En revanche, si vous avez une petite plaque avec quelques connecteurs dessus, ça se complique, mais pas beaucoup :

Sur chacun des pins de la carte, il y a un nom de marqué normalement. Il vous faut donc relier les différents pins du shield (+5v, GND, SCK, MOSI ou DO, MISO ou DI) au pin Arduino correspondant de votre carte selon ce tableau trouvé dans la documentation Arduino:

Arduino Board MOSI MISO SCK SS (slave) SS (master)
Uno or Duemilanove 11 or ICSP-4 12 or ICSP-1 13 or ICSP-3 10
Mega1280 or Mega2560 51 or ICSP-4 50 or ICSP-1 52 or ICSP-3 53
Leonardo ICSP-4 ICSP-1 ICSP-3
Due ICSP-4 ICSP-1 ICSP-3 4, 10, 52

Puis connectez le pin Cs à n’importe quel pin de votre Arduino, dans ce tutoriel, branchez-le sur le pin 4, pour suivre les exemples.

Enfin, il faut formater votre carte SD en FAT16 ou FAT32, depuis votre ordinateur.

 

Les codes de base

On commence comme à chaque fois qu’on utilise une nouvelle librairie par l’inclure par l’indémodable ligne :

#include <SD.h>

Dans votre programme, vous serez amener à manipuler des fichiers, pour utiliser un fichier, on déclare une variable de type File(=fichier) que l’on pourra ensuite utiliser :

File monFichier;

Ensuite, dans la fonction setup, il vous faut « démarrer » votre shield SD, pour cela on utilise la séquence suivante qui permet de déterminer si il  a une erreur via la liaison série  :

if (!SD.begin(4)) {
    Serial.println("Erreur de demarrage!");
    return;
  }
  Serial.println("Carte SD prête.");

On va ensuite s’interreser aux fichiers, car c’est là tout l’interet du tutoriel, en utilisant la variable monfichier crée plus haut, on utilise la fonction suivante pour ouvrir un fichier; notez que l’on ne peut ouvrir qu’un seul fichier à la fois :

// si le fichier que vous voulez ouvrir n'existe pas, il sera créé.
monFichier = SD.open("test.txt", FILE_WRITE); // ouvre le fichier en mode ecriture
monFichier = SD.open("test.txt", FILE_READ); // ouvre le fichier en mode lecture
monFichier = SD.open("test.txt"); // ouvre le fichier en mode lecture

Il convient ensuite de vérifier que le fichier est bien ouvert, on utilise pour cela la condition suivante :

if (monFichier) {
    Serial.print("Fichier ouvert avec succès.");
    // code à executer
  } else {
    // si le fichier ne s'est pas ouvert : 
    Serial.println("Erreur lors de l'ouverture de test.txt");
  }

Vous pourrez après tout ces controles lire ou écrire dans le fichier en fonction du mode d’ouverture.

Commençons par l’écriture:

  monFichier.println("Fichier créé grâce à tutoarduino.com !!"); // écrit la chaine de caractère dans le fichier, tout simplement
  monFichier.close(); // il ne faut surtout pas oublier de fermer le fichier après
N’oubliez pas de fermer le fichier comme indiqué dans le code grâce à la fonction monFichier.close();

Voila ensuite un bout de code qui permet de lire chaque caractère d’un fichier ouvert en mode lecture :

    // on fait une boucle jusqu'à ce qu'on ait tout lu :
    while (monFichier.available()) {
        char c = monFichier.read(); // on stocke le caractère dans c
        // on fait ce qu'on veut avec le caractère lu, ici on l'envoie par liaison série
        Serial.write(c);
    }
    // on ferme bien le fichier après lecture:
    monFichier.close();

Bon et bien il me semble que l’on a fait le tour des fonctions les plus utiles, si vous voulez en utiliser d’autres, rendez-vous sur cette page officielle qui vous dira tout ce que vous cherchez.

Un exemple officiel

Cet exemple met en place toutes les fonctions que nous avons vu ensemble, il va écrire dans un fichier, puis envoyé par série ce que le fichier contient :

/*
  SD card read/write
 
 This example shows how to read and write data to and from an SD card file  
 The circuit:
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 4
 
 created   Nov 2010
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 
 This example code is in the public domain.
     
 */
 
#include <SD.h>

File myFile;

void setup()
{
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  Serial.print("Initializing SD card...");
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
  // Note that even if it's not used as the CS pin, the hardware SS pin 
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output 
  // or the SD library functions will not work. 
   pinMode(10, OUTPUT);
   
  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");
  
  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  myFile = SD.open("test.txt", FILE_WRITE);
  
  // if the file opened okay, write to it:
  if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.println("testing 1, 2, 3.");
    // close the file:
    myFile.close();
    Serial.println("done.");
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }
  
  // re-open the file for reading:
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");
    
    // read from the file until there's nothing else in it:
    while (myFile.available()) {
        Serial.write(myFile.read());
    }
    // close the file:
    myFile.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }
}

void loop()
{
    // nothing happens after setup
}

Laisser un commentaire