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

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
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

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