.
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 :
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)
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 ");
}
.
.
