View  Edit  Attributes  History  Attach  Print  Search

ACCUEIL | ARDUINO > S'INSTALLER > DEBUTER > APPROFONDIR | PROCESSING | MECATRONIQUE | MATERIEL | OUTILS | TESTS | Plus...|
Python > Shell > ATELIERS Python + Qt > PyQt apps > PyQt+Arduino | Mes Robots | RepRap | Mes lib'Arduino | Mes shields Arduino | Mes distros | Les Mini-PC |
ATELIERS ARDUINO| VIDEOS | COMPRENDRE | REFERENCES | CODER | TECHNIQUE | GNU/LINUX | LIENS | Rien à voir |

SD Card : Test de l'ouverture et de l'écriture dans un fichier

Par X. HINAULT - Page créée le : 14/2/2012.

1.  Présentation

Ce programme teste l'ouverture et l'écriture d'une valeur dans un fichier de SD card.

Ce programme utilise les fonctionnalités suivantes :

  • Utilise la connexion série vers le PC
  • Utilise le module Ethernet Arduino (uniquement pour le connecteur SD Card)

Ressources utiles associées à ce programme :

  • La librairie Serial - pour les communications séries entre la carte Arduino et l'ordinateur ou d'autres composants
  • La librairie Ethernet - pour se connecter à Internet en utilisant le module Arduino Ethernet
  • La librairie SD - pour utiliser une SD Card

2.  Matériel Nécessaire

2.1  L'espace de développement Arduino

  • ... pour éditer, compiler le programme et programmer la carte Arduino.

2.2  Le matériel suivant pour réaliser le montage associé

  • un module Arduino Ethernet ou tout autre module disposant d'un emplacement pour carte mémoire SD.
  • une carte mémoire micro-SD

3.  Instructions de montage

  • La connexion série vers le PC utilise les broches 0 et 1 (via le câble USB)
  • Le module Ethernet est à enficher broche à broche sur la carte Arduino
    • Connecter broche SCLK du module Ethernet sur la broche 13
    • Connecter broche MISO du module Ethernet sur la broche 12
    • Connecter broche MOSI du module Ethernet sur la broche 11
    • Connecter broche Select Ethernet du module Ethernet sur la broche 10
    • Connecter broche Select SD Card du module Ethernet sur la broche 4
    • Le module Ethernet est compatible avec la carte Mega via le connecteur ICSP

Avant de l'utiliser, il est nécessaire d'initialiser la carte mémoire micro-SD sur le PC en créant un répertoire /monrep et un fichier. test.txt.

4.  Le circuit du montage

Le schéma du montage à réaliser (cliquer pour agrandir)

5.  Explication du programme

  • Ce programme teste l'existence d'un fichier : si le fichier existe, le répertoire est ouvert et une valeur est écrite en fin de fichier.
  • Le déroulement des opérations est affiché dans un Terminal Série

6.  Mise en oeuvre du programme

6.1  Préparation du montage et programmation de la carte Arduino :

  • Commencer par réaliser le montage indiqué sur plaque d'expérimentation
  • Ensuite, programmer la carte Arduino avec ce programme (en bas de page) selon la procédure habituelle

6.2  Préparation du Terminal côté PC dans le logiciel Arduino

  • Côté PC, il faut ouvrir la fenêtre terminal de l'IDE Arduino : pour ce faire, un simple clic sur le bouton « Sérial Monitor ».
  • La fenêtre « Terminal » s'ouvre alors :
  • Il faut alors régler le débit de communication sur la même valeur que celle utilisée par le programme avec lequel nous allons programmer la carte Arduino :

6.3  Fonctionnement

Avant de l'utiliser, il est nécessaire d'initialiser la carte mémoire micro-SD sur le PC en créant un répertoire /monrep et un fichier. test.txt.

  • Au lancement, du Terminal Série, les messages des opérations s'affiche. Relancer plusieurs fois le Terminal Série pour voir les valeurs ajoutées dans le fichier.

7.  Le programme complet en langage Arduino

A copier/coller directement dans l'éditeur Arduino


// Auteur du Programme : X. HINAULT - Tous droits réservés
// Programme écrit le : 12/2011.

// ------- Licence du code de ce programme -----
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License,
//  or any later version.
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.


#include <SD.h> // crée automatiquement un objet racine SD représentant la carte mémoire SD

File myFile; // objet file

char dirName[]="/monrep"; // tableau de caracteres pour le nom du répertoire

// nom du fichier court (8 caractères maxi . 3 caractères maxi) (dit format DOS 8.3)
char fileName[] = "test.txt"; // tableau de caractères pour le nom du fichier

char pathFile[] = "/monrep/test.txt"; // tableau de caractères pour le nom du fichier

int test; //variable mémorisation résultat renvoyé par fonctions

void setup()
{

  Serial.begin(115200); // utiliser le meme debit coté Terminal Serie


  //----- initialisation de la carte SD -----
  Serial.println("Initialisation de la SD card...");

  pinMode(10, OUTPUT); // laisser la broche SS en sortie - obligatoire avec librairie SD

  test=SD.begin(4); // initialisation de la carte SD avec broche 4 en tant que CS - renvoie true/false

  if (test!=true) { // si initialisation n'est pas réussie
    Serial.println("Echec initialisation!"); // message port Série
  }
  else { // si nitialisation réussie
    Serial.println("Initialisation reussie !"); // message port Série
  } // fin si SD.begin

  //----- test de l'existence d'un répertoire

 test=SD.exists(pathFile); // test si le répertoire existe - renvoie true/false

 Serial.print ("Test="); Serial.println(test);

 if (test!=true) { // si le répertoire n'existe pas

   Serial.println ("Le fichier n'existe pas !");

 }
 else { // si le répertoire existe

     Serial.println ("Le fichier existe !");

     //SD.remove(pathFile); // efface le fichier  
     //Serial.println ("Fichier efface !");


    //----- ouverture du fichier ---

    myFile=SD.open(pathFile,FILE_WRITE); // ouvre le fichier en écriture et crée fichier si existe pas

    //Serial.print ("Test="); Serial.println(test);

     if (myFile!=true) { // si échec ouverture

       Serial.println ("Echec ouverture fichier !");

     }

     else { // si ouverture réussie

       Serial.println ("Ouverture fichier reussie !");

      myFile.seek(myFile.size()); // positionnement à la fin du fichier

       Serial.println ("Positionnement a la fin du fichier!");

      myFile.println(); // ajoute un saut de ligne

      myFile.println("------ Debut nouvel enregistrement -------"); // ajoute une ligne


      myFile.println(millis()); // ajoute la ligne au fichier - ici enregistre la valeur de millis

      /*-- affiche une nouvelle série de 30 valeur
      for (int i=0; i<30; i++) {

        myFile.println(i); // ajoute la ligne au fichier

      }
      */


       myFile.close(); // fermeture du fichier

       Serial.println ("Fermeture fichier effectuee!");


       test=SD.exists(pathFile); // test si le fichier existe - renvoie true/false

       Serial.print ("Test="); Serial.println(test);

       if (test!=true)  { // si fichier existe pas

         Serial.println ("Le fichier existe pas !");

       }

       else { // si fichier existe

         Serial.println ("Le fichier existe !");

         //--- ouverture du fichier en lecture ---
          myFile=SD.open(pathFile,FILE_READ); // ouvre le fichier en lecture

         Serial.println ("Ouverture du fichier en lecture");

         for (int i=0; i<myFile.size(); i++ ) {

           myFile.seek(i); // se positionne à la position i
           Serial.print(char(myFile.peek())); // affiche le caractère courant

         }


       myFile.close(); // fermeture du fichier

       Serial.println ("Fermeture fichier effectuee!");

       } // fin else si fichier existe

     } // fin else si ouverture répertoire réussie

 }// fin else si répertoire



} // fin setup()  

void loop(){



}