Arduino comment créer un fichier sur une carte SD

.

Mise à jour le 14/06/2021 : La librairie SD  sur Arduino permet de créer un fichier sur une carte SD , de lire et d’écrire ce même fichier .

Sommaire :

.

separateur-redohm-001

But du tutoriel

Dans cet article , nous traitons de l’utilisation de la carte SD et pour traiter de ce sujet , nous avons pris comme problème le cahier des charges suivant .

  • L’enregistrement de donnée venant d’une ou des entrées analogiques de la carte Arduino et de les stocker sur la carte SD.
  • Lors du démarrage du programme nous devons savoir si la carte est bien initialisée par le biais du moniteur de l’IDE Arduino.
  • Nous devons avoir la possibilité de choisir par le biais de boutons dans quel mode on va opérer (création de fichiers avec enregistrement, lecture de fichiers, suppression du fichier)

.

separateur-redohm-001

Code Arduino

//
//
//**********************************************************
//
//creer un fichier txt sur la carte SD 
// ecrire dans le fichier 
//  lire ce meme fichier 
//   efface le fichier 
//
// RedOhm
// Par Herve Mazelin 
// 03/06/2021
//
//********************************************************* 
//


//Cette bibliothèque vous permet de communiquer avec des périphériques SPI,
//avec l'Arduino comme périphérique maître.
#include <SPI.h>
//La bibliothèque SD permet de lire et d'écrire sur des cartes SD
//La bibliothèque prend en charge les systèmes de fichiers FAT16
//et FAT32 sur les cartes SD standard et les cartes SDHC.
//Il utilise des noms 8.3 courts pour les fichiers. 
#include <SD.h>

const int chipSelect = 4;

File cobot;

// *********************************************************
//                   Declaration des axes 
// *********************************************************

// le potentiomètre, branché sur la broche analogique 6
   int potar_rotation = 6;


// creation de la variable rotation
   int valeur_rotation ;  



// --------------- demande d'enregistrement ----------------------
// déclaration de l'entrée du bouton branché sur la broche 15
// de votre carte Arduino 
int bouton15 = 15;
// variable du type int pour stocker les valeurs de passage du bouton15
int bouton15v;

//--------------- demande de lecture ----------------------------
// déclaration de l'entrée du bouton branché sur la broche 19
// de votre carte Arduino 
int bouton19 = 19;
// variable du type int pour stocker les valeurs de passage du bouton19
int bouton19v = 0;

//--------------- efface le fichier  ----------------------------
// déclaration de l'entrée du bouton branché sur la broche 22
// de votre carte Arduino 
int bouton22 = 22;
// variable du type int pour stocker les valeurs de passage du bouton22
int bouton22v = 0;




//--------------- variable divers ----------------------------
int cobot_attend = 1 ;



// ---------------------------------------------------------------------------
// Un programme Arduino doit impérativement contenir la fonction "setup"
// Elle ne sera exécutée une seule fois au démarrage du microcontroleur
// Elle sert à configurer globalement les entrées sorties
// ---------------------------------------------------------------------------
void setup() {
  //ouvre le port série et fixe le debit de communication à 9600 bauds
  Serial.begin(9600);
  // on attent que le port de communication soit pret
  while (!Serial) {
    ; 
  }

// *********************************************************
// Configuration des entrees pour les boutons de selection
// *********************************************************

 
// pinMode :Configure la broche spécifiée pour qu'elle se comporte soit
// en entrée, soit en sortie
// bp enregistrement 
pinMode (bouton15,INPUT );
// bp lecture
pinMode (bouton19,INPUT );
// bp efface le fichier
pinMode (bouton22,INPUT );

// *********************************************************
//          Initialisation de la carte SD 
// *********************************************************

 
 Serial.println("=================================================");
 Serial.println("Initialisation de la carte SD ");

  // Avec SD.begin -> on initialise la librairie SD et la carte SD.
  // Cela lance aussi l'utilisation du bus SPI
  // 
  // on controle si la carte est presente dans son support et si elle 
  // peut etre initialisee
  // 
  //  initialise la broche de sélection du circuit intégré (chipSelect)
  if (!SD.begin(chipSelect)) {
    Serial.println("defaut carte SD ou non presente");
    // Arret
    while (1);
  }
  for (int delai = 0; delai<5;delai++)
  {
  Serial.print(".");delay(300);
  }
  
  Serial.println("Carte initialisée");
  Serial.println("=================================================");

//***************Fin du bloc SD ****************************** 
}

// ---------------------------------------------------------------------------
// Le programme principal s’exécute par une boucle infinie appelée Loop () 
// ---------------------------------------------------------------------------
void loop() {


// *********************************************************
//        creation du menu du cobot 
// *********************************************************

if (cobot_attend == 1)
{
   // appel de la fonction -> cobot_en_attente
   cobot_en_attente();
}   

else if (cobot_attend == 0)
  {
    
  } 
  

// *********************************************************
//        creation de la commande enregistrement 
// *********************************************************
    
//lecture de l etat du bouton demande d'enregistrement
bouton15v = digitalRead(bouton15);
 
  if (bouton15v == 1)
  {
    
  // information de l'enregistrement mouvement a l'operateur
  Serial.print("");
  Serial.println("=================================================");  
  for (int delai = 0; delai<5;delai++) {
  Serial.print(".");delay(300);}  
  Serial.println("Lancement de l'enregistrement des mouvements ");
  Serial.println("================================================="); 
  
  // appel de la fonction -> enregistrement_des_capteurs()
  enregistrement_des_capteurs();
  }
  
  else if (bouton15v == 0)
  {
    
  } 

// lecture de l etat du bouton demande de lecture 
bouton19v = digitalRead(bouton19);

   if (bouton19v == 1)
  {
    
  // appel de la fonction -> vider l'ecran
     vider_ecran();
  // information de lecture a l'operateur
  Serial.print("");
  Serial.println("=================================================");  
  for (int delai = 0; delai<5;delai++) {
  Serial.print(".");delay(300);}  
  Serial.println("Lancement lecture Carte ");
  Serial.println("=================================================");

 // appel de la fonction -> lecture_carte_sd ()
    lecture_carte_sd ();
  
  }
  
  else if (bouton19v == 0)
  {
    
  }   



// lecture de l etat du bouton efface le fichier 
bouton22v = digitalRead(bouton22);

if (bouton22v == 1)
  {
    // appel de la fonction -> vider l'ecran
     vider_ecran();
    Serial.print("");
    Serial.println("=================================================");  
    for (int delai = 0; delai<5;delai++) {
    Serial.print(".");delay(300);}  
    Serial.println(" Suppression du fichier ");
    Serial.println("=================================================");
 
    // appel de la fonction -> suppprime_le_fichier()
    suppprime_le_fichier(); 
  }
      
 else if (bouton22v == 0)
  {
    
  }  
}

// ************ Fin de la partie loop **************************






//*************************************************
//  Enregistrement des capteurs sur la carte SD
//*************************************************

void enregistrement_des_capteurs()
{

// créer une chaîne pour assembler les données
  String dataString = "";

for (int i=0 ; i <= 16 ; i=i+1){
  
  valeur_rotation=analogRead(potar_rotation); 
  dataString = valeur_rotation ;
  // concatène les chaînes avec d'autres données.
  dataString += ",";

  // ouvrez le fichier.attention un seul fichier peut être ouvert à la fois,
  // il faut donc fermer celui-ci avant d'en ouvrir un autre
  // 
  // FILE_WRITE ->  ouvre le fichier en lecture et en écriture, 
  // en commençant par la fin du fichier.
  File fichier = SD.open("cobot.txt", FILE_WRITE);

  // si le fichier est disponible, on ecrit sur la carte 
  if (fichier) {
    fichier.println(dataString);
    fichier.close();
    // Affiche les valeurs sur le moniteur serie
    Serial.println(dataString);
  }
  // si le fichier n'est pas ouvert, affiche une erreur:
  else {
    Serial.println("erreur d'ouverture cobot.txt");
  }

 delay(200);
 }
 cobot_attend = 1;
 delay(2000);
  
}

//*************************************************
//              Lecture du fichier
//*************************************************

void lecture_carte_sd ()
{

// ouvrez le fichier.attention un seul fichier peut être ouvert à la fois,
// il faut donc fermer celui-ci avant d'en ouvrir un autre
   File fichier = SD.open("cobot.txt");


   // si le fichier est disponible on peut lire 
  if (fichier) {
    while (fichier.available()) {
      // Serial.write -> Écrit des données binaires sur le port série.
      // Ces données sont envoyées sous forme d'octet ou de série d'octets
      // fichier.read -> recuperation du contenue du fichier 
      Serial.write(fichier.read());
    }
    fichier.close();
  }
  // si le fichier n'est pas ouvert, affiche une erreur
  else {
    Serial.println("Probleme le fichier cobot.txt");
     Serial.println(" ");
  }
  cobot_attend = 1;
  delay(2000);
  
}

//*************************************************
//              Supprimer le fichier
//*************************************************

void suppprime_le_fichier()
{
Serial.println("Efface le fichier cobot.txt ");
// SD.remove ->  Supprime un fichier de la carte SD.
// SD.remove(nom de fichier) soit -> SD.remove("cobot.txt");
SD.remove("cobot.txt");
// on controle la destruction du fichier
// SD.exists -> Cette fonction teste si un fichier existe sur notre 
// carte mémoire SD.
// cette instruction renvoie :
//          true : si le fichier ou répertoire existe
//          false : si le fichier ou le répertoire n'existe pas
if (SD.exists("cobot.txt")) {
    Serial.println("le fichier n'a pas etait detruit.");}

else { 
  Serial.println("le fichier est detruit.");}     


// forcage de la variable cobot pour afficher le menu
cobot_attend = 1;
delay(2000);  
}

//*************************************************
//              Vider l'ecran
//*************************************************

void vider_ecran(){

for (int ligne=0;ligne <3; ligne ++)

{
Serial.println("");
}

}

//*************************************************
//              cobot en attente
//*************************************************

void cobot_en_attente ()
{
cobot_attend = 0;
Serial.print("");
 Serial.println("=================================================");  
  Serial.println("        Cobot Oryon en attente ");
   Serial.println("=================================================");  
    Serial.println("");
     Serial.println("bouton rouge -> Enregistrement");
      Serial.println("bouton vert -> Lecture");
       Serial.println("bouton bleu -> efface le fichier ");
      
}

 

.

.