[Arduino] Parser et ecrire sur carte SD des données Arduino

L’espace pour parler de tout ce qui concerne l’électronique embarquée
Avatar de l’utilisateur
papy94
Messages : 654
Inscription : 23 janv. 2010 14:31
Localisation : Champigny sur marne
Contact :

[Arduino] Parser et ecrire sur carte SD des données Arduino

Message par papy94 »

En partant de l'exemple :Transfer et Parser des données Arduino

j'ai rajouté du code pour écrire mes données sur une carte SD
Image

Code : Tout sélectionner

/*carte Nano RECEPTRICE
 arduino v1.0.1

 donnees (trame) recus : <1;-3;16;2294;531>
 '<' = le debut de la trame
 '>' = la fin de la trame
 ';' = delimitateur des donnees

ce qui sera enregistre sur la carte sd
    00:02:48;1;-3;16;22.94;5.31
*/


#include <SD.h>
#define SD_CARD_CD_DIO 10 /* DIO broche utilise pour commander les modules CS broche */
File SDFileData;

//----------
String Trame;              // Chaine pour contenir la Trame entrante
boolean TrameRecu = false; // si la Trame a ete recue dans son integralite
int NbrData = 4;           // Nombre de donnes qui seront recus
long Jours=0;
long heures=0;
long minutes=0;
long secondes=0;


//=======================================================================================================
void setup()
{
pinMode(10,OUTPUT);  // Sortie CS Carte SD

Serial.begin(9600);

//-------carte SD
if (!SD.begin(SD_CARD_CD_DIO)){ // Initialise la SD carte
  Serial.println("ERROR: SD card, Echec de l'initialisation");
 }else{Serial.println("SD Card OK");}
   
      //----suppression du fichier si il existe deja
       /*while(SD.exists("test.txt")){      // Verifiez si le fichier texte existe deja
       Serial.println("test.txt existe deja ... SUPPRESSION");
       SD.remove("test.txt");}             //Si oui, alors le supprimer
       */
//-------Fin carte SD

}
//======================================
void loop() {
  handleCommand();


} //*************** FIN LOOP
//======================================


//************************* routines
void serialEvent(){
  while (Serial.available()) {// si recois des donnes
    char incomingByte = (char)Serial.read();
    if (incomingByte == '>'){ // Fin de la Trame
       TrameRecu = true;
       return;
    }else if (incomingByte == '<'){ // Debut d une nouvelle Trame
       Trame = "";
       TrameRecu = false;
       return;
    }else{
      Trame += incomingByte;
      return;
    }
  }
}

void handleCommand() {
  if (!TrameRecu) return; // aucune Trame a parser
  int data[NbrData];     // un maximum de 5 nombres entiers de donnees
  char cmd[Trame.length()+1];
  Trame.toCharArray(cmd, Trame.length()+1);
  char *token = strtok(cmd, ";");

  for (int i = 0; i < NbrData+1; i++) { // mettre datas dans tableau
    if (token) {
      data[i] = atoi(token);
      token = strtok(NULL, ";");
    }
 }
  CalculTemps(); // pour inserer avant la trame: hh:mm:ss
//---Pour verif sur monitor de ce qui a ete recu
  Serial.print("data[0] = ");Serial.println(data[0]);
  Serial.print("data[1] = ");Serial.println(data[1]);
  Serial.print("data[2] = ");Serial.println(data[2]);
  Serial.print("data[3] = ");Serial.print(data[3]/100);Serial.print(",");Serial.println(data[3]%100);
  Serial.print("data[4] = ");Serial.print(data[4]/100);Serial.print(",");Serial.println(data[4]%100);

//---Ecriture sur carte SD
  SDFileData = SD.open("test.txt", FILE_WRITE);
  if (SDFileData){;            // Si le fichier est bien present
    SDFileData.print(heures);SDFileData.print(":");SDFileData.print(minutes);SDFileData.print(":");SDFileData.print(secondes);SDFileData.print(";");
    SDFileData.print(data[0]);SDFileData.print(";");
    SDFileData.print(data[1]);SDFileData.print(";");
    SDFileData.print(data[2]);SDFileData.print(";");
    SDFileData.print(data[3]/100);SDFileData.print(".");SDFileData.print(data[3]%100);SDFileData.print(";");
    SDFileData.print(data[4]/100);SDFileData.print(".");SDFileData.println(data[4]%100);
    SDFileData.close();        // Ferme le fichier
    Serial.println("Donnees enregistrees sur carte SD.");
  }else{
    Serial.println("Erreur d'ecriture du fichier !");
  }
//
  TrameRecu = false;// Drapeau pour dire que nous avons traite la commande
 }

//-------------- Calcul du temps pour affichage
void CalculTemps()
{
  secondes = millis()/1000; //convect millisecondes en secondes
  minutes=secondes/60; //convertir secondes en minutes
  heures=minutes/60; //convertir minutes en heures
  Jours=heures/24; //convertir heures en Jours
  secondes=secondes-(minutes*60); //soustraire les secondes converties afin d'afficher 59 secondes max
  minutes=minutes-(heures*60);    //soustraire les minutes converties afin d'afficher 59 minutes max
  heures=heures-(Jours*24);       //soustraire les heures converties afin d'afficher 59 heures max 
  Serial.print(heures);Serial.print(":");Serial.print(minutes);Serial.print(":");Serial.print(secondes);Serial.println(";");
}//----FIN Calcul du temps pour affichage
sur la carte SD, j'ai donc un fichier test.txt, qui contient

Code : Tout sélectionner

0:0:15;1;7;14;21.20;4.72
0:0:15;1;7;14;21.20;4.72
0:0:21;0;5;11;21.16;4.72
0:0:23;1;5;4;21.16;4.72
0:0:24;0;5;22;21.17;4.72
0:0:25;1;4;14;21.16;4.72
0:0:27;8;7;13;21.14;4.72
0:0:29;1;7;8;21.14;4.72
0:0:36;2;7;803;21.11;4.72
0:0:40;2;4;1169;21.12;4.72
0:0:43;0;6;1500;21.14;4.72
0:0:44;1;4;1532;21.11;4.72
0:0:44;4;5;1601;21.11;4.72
0:0:54;5;4;1891;21.11;4.72
0:0:58;1;7;1587;21.7;4.72
0:0:59;2;5;1469;21.9;4.72
0:1:2;1;7;791;21.9;4.72
0:1:5;0;4;800;21.7;4.72
0:1:5;2;6;814;21.6;4.72
0:1:6;2;6;827;21.7;4.72
0:1:7;3;5;963;21.7;4.72
0:1:10;2;5;1208;21.7;4.72
0:1:12;3;5;1184;21.6;4.72
0:1:13;2;4;1072;21.4;4.72
0:1:14;1;7;780;21.6;4.72
0:1:25;0;5;111;21.6;4.72
0:1:25;1;4;96;21.4;4.72
0:1:26;0;3;104;21.4;4.72
0:1:30;0;5;103;21.2;4.72
0:1:55;0;6;100;21.1;4.72
0:2:9;1;5;99;21.4;4.72
0:2:15;0;5;96;21.1;4.72
0:2:20;0;5;96;21.3;4.72
0:2:41;7;2;85;21.3;4.72
il me reste plus qu'a ouvrir ce fichier avec Excel, et j'ai de quoi faire des beaux graphiques et analyser

Image

Honnêtement ,écrire les données sur une carte SD n'est pas indispensable,mais cela m'a permis de comprendre 2 ou 3 petites choses qui me serviront, et cela peut servir aux autres

J'ai extrais le code de mon programme principal pour simplifier la compréhension, je ne pense par avoir oublié de lignes, je n'ai pas testé ce programme court,mais cela fonctionne très bien avec le programme principal

bien sur , il y a surement une meilleur façon d’écrire ce code,mais cela fonctionne et cela me suffit
Dernière modification par papy94 le 26 juin 2013 18:42, modifié 1 fois.
Avatar de l’utilisateur
laurent0091
Messages : 188
Inscription : 06 mars 2011 00:00
Localisation : Essone (91)
Contact :

Re: Parser et ecriture sur carte SD des données Arduino

Message par laurent0091 »

Bonjour Thierry,
et bien chapeau bas l'ami, tu peux être satisfait de ton travail. c'est vraiment très intéressant de stoker des informations et de pouvoir les analyser sur un graph. ça ouvre pas mal de perspective.
En tout cas tu l'un de ceux qui a le plus avancé sur la question.
As tu un schéma de l'interconnexion des deux arduino et de la carte sd à nous montrer?

Laurent
Avatar de l’utilisateur
Teba
Modérateur
Messages : 7002
Inscription : 06 janv. 2010 00:53
Localisation : Le Thor (84)

Re: Parser et ecriture sur carte SD des données Arduino

Message par Teba »

Bonjour, :)

Je me joint au coup de chapeau, moi qui n'y connais rien, au fil des messages , je t'ai vu progresser et maintenant je vois que tu affiche tes résultats avec graphiques comme un pro, exemple à suivre bravo. :o :respect: :respect: :respect:
Avatar de l’utilisateur
papy94
Messages : 654
Inscription : 23 janv. 2010 14:31
Localisation : Champigny sur marne
Contact :

Re: Parser et ecriture sur carte SD des données Arduino

Message par papy94 »

Merci les gars, cela fait toujours plaisir :oops:
Mais j'y passe vraiment beaucoup trop de temps et mon soum n'avance plus

Laurent ,je met en pièce jointe le fichier FRITZING, je pense que tu là
je ne retouche pas a chaque fois, mais il est récent
_Platine_NANOv3.3_V2.rar
(58.5 Kio) Téléchargé 297 fois
si tu as un doute sur des branchements n’hésites pas à demander
Avatar de l’utilisateur
Jacky-Soum
Messages : 2230
Inscription : 02 févr. 2010 20:19
Localisation : La GUERCHE sur L'AUBOIS, région centre

Re: Parser et ecriture sur carte SD des données Arduino

Message par Jacky-Soum »

Salut Papy et bravo ! ;)

:applaudi: :applaudi:
Étant débutant sur Arduino (et oui, je m'y mets moi aussi !!!) je rejoins Laurent et Michel dans leurs commentaires ! :respect:
Et n'étant pas débutant dans le domaine de la programmation, loin de là, je suis tout à fait d'accord avec toi lorsque tu dis que ça prend du temps !!! :frust: :Oo:
Mais c'est le prix à payer pour atteindre un résultat valable ! :Up:

Cordialement de jacky-Soum :trinque:
"Où mon chapeau passe, la pluie trépasse !"
"La SOUS-MARINITE aigüe est une maladie virale très contagieuse !"
"Heureux possesseur du LAUBIE ex U766"
"Le poseur de mines RUBIS des FNFL en construction..."
Avatar de l’utilisateur
papy94
Messages : 654
Inscription : 23 janv. 2010 14:31
Localisation : Champigny sur marne
Contact :

Re: Parser et ecriture sur carte SD des données Arduino

Message par papy94 »

c'est cool mon jacky d'amour ,si toi aussi tu tu touches a cette petit drogue,comme ça ont pourra fumer ensemble :drunk:

j'essaye encore un ou deux truc, âpres j'enferme cette drogue a double tour et j'installe dans le soum le bazar :bave:
Avatar de l’utilisateur
Geeks
Messages : 3593
Inscription : 03 juil. 2010 21:04
Localisation : Brive la Gaillarde (Correze 19)

Re: Parser et ecriture sur carte SD des données Arduino

Message par Geeks »

Wah !

C'est bien coder, c'est commenté et ça marche :Up:

Vraiment, châpeau !

Bon, ben il a une longueur d'avance maintenant !
Il faut que je m'y remette :) :lol:
A défaut d'avoir la science infuse, j'infuse la science. - Racleur de fond depuis Pons 2014.
Sous-marin en état de repos sur cale : Minimog 01
Avatar de l’utilisateur
coaxial
Messages : 3673
Inscription : 23 janv. 2010 19:35
Localisation : saint orens 31

Re: Parser et ecriture sur carte SD des données Arduino

Message par coaxial »

Si tu monte tout ça dans le soum , c'est sur tu prends un train d'avance :Up:

:applaudi:
Moins je réfléchis plus fort et plus j'agis moins vite
Les bons crus font les bonnes cuites => Pierre Dac .
.... la simplicité est-ce bien la plus simple solution ..........?
La femme est l'avenir de l'homme .
Avatar de l’utilisateur
gagouze
Messages : 1961
Inscription : 24 janv. 2010 22:39
Localisation : Brest (29)

Re: Parser et ecriture sur carte SD des données Arduino

Message par gagouze »

je suis du même avis que Geeks

cela fait au moins 8 ans que je n'ai pas codé en C ou en C ++

et je comprends ton code très bien :Up:

tous les programmeurs pros ne font pas un code aussi lisible (faute de temps et ils doivent tenir les délais ou qu'ils se foutent de la maintenabilité de leur code et les collègues se démerderont avec :evil: :evil: :evil: :evil: )
Etienne
Un Galathée
Un voilier caboteur en construction : Le Narval
Un classe Alfa en construction.
Répondre