En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies pour vous proposer des contenus et services adaptés. Mentions légales.
Vous êtes ici :   Accueil » Parser et ecrire sur SD
 
Prévisualiser...  Imprimer...  Imprimer la page...
Prévisualiser...  Imprimer...  Imprimer la section...

Rubriques

Rencontres (SM)

Mike James's

De jolis Modèles à voir sur ce site

 ↑  

Astuces (SM)

 ↑  

Mon Materiel

 ↑  

HMS TRENCHANT

 ↑  

Le U73

 ↑  

S100 SchnellBoot

 ↑  

La JOCELYNE

 ↑  

Le MOLCH

 ↑  

Réseaux sociaux

Parser et ecrire sur SD

rss Cet article est disponible en format standard RSS pour publication sur votre site web :
https://papy94.fr/Site/data/fr-articles.xml

Parser des données Arduino

et les ecrire sur une carte SD

06/2013
 

 

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

 

/*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);
  minutes=minutes-(heures*60);  
  heures=heures-(Jours*24);    
  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
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

 

 


Date de création : 14/06/2013 @ 10h56
Dernière modification : 14/06/2013 @ 11h00
Page lue 7423 fois

Traduction

Recherche

Recherche

Préférences


Se reconnecter :
Votre nom (ou pseudo) :
Votre mot de passe
<O>


  547808 visiteurs
  2 visiteurs en ligne

  Nombre de membres 114 membres
Connectés :
( personne )
Snif !!!

Cela peut servir

 ↑  

Calendrier

Lien constructions

Il faut ètre inscrit sur les forums
_ Buildingreport of my type VIIC scale 1:35 Forum RCgroups
_ My 1/32 VIIC Forum RCgroups
_ graupner Shark conversion Forum RCgroups
_ Engel Gato anyone building Forum RCgroups
_ VII-C/41 REVELL au 1/72ém Forum La royale
_ VII-C/41 REVELL au 1/72ém Forum subsim

 ↑  

Annonce

Archives Nouvelles


+ Année 2017
 -  Année 2017
+ Année 2015
 -  Année 2015
+ Année 2014
 -  Année 2014
+ Année 2013
 -  Année 2013
+ Année 2012
 -  Année 2012
+ Année 2011
 -  Année 2011
+ Année 2010
 -  Année 2010
+ Année 2009
 -  Année 2009
Vous êtes ici :   Accueil » Parser et ecrire sur SD