Helmotz

Dependencies:   mbed

Revision:
0:8d7791a3b914
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Lecture.cpp	Thu May 18 10:25:12 2017 +0000
@@ -0,0 +1,91 @@
+#include <mbed.h>
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+#include <Fonction.h>
+
+using namespace std;
+
+DigitalOut led(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+string trame;  //Trame complète.
+Serial Dtrame(p13, p14, 9600); //(tx, rx, baud)
+int i = 6;  //Iterateur.
+stringstream sstr;   //stringstream permet de faire la liaison entre le string de départ et le int sortant.
+int vchecksum;  //Octet permetant le controle de 'checksumi'.
+string start1; //Octet de start.
+int start1i;   //'start1' converti en int.
+string start2; //Octet de start.
+int start2i;   //'start2' converti en int.
+string Lenght;  //Octet du nombre de parametre.
+int Lenghti;    //'Lenght' converti en int.
+string checksum;    //Octet du checksum.
+int checksumi;      //'checksum' converti en int.
+string parametre;   //Octet de parametre.
+int tabParametrei[7];  //'parametre‘ converti en int et stocké dans le tableau.
+char tabctrame[7];
+
+int* lecturetrame()
+{
+    led2 = 1;
+    Dtrame.gets(tabctrame, 7);
+    trame = tabctrame;
+    wait (2.0);
+    led2 = 0;
+    led3 = 0;
+    //cout << "Entrer la trame :" << endl;
+    //cin >> trame;
+    start1 = trame.substr(0,2); //Enregistrement de deux Nombres à partir de 0.
+    sstr << start1; //Stock le contenue du string 'start1' dans le flux 'sstr'.
+    sstr >> hex >> start1i; //Enregistre le contenue du flux 'sstr' en hexa dans l'int 'start1i'.
+    sstr.clear();   //Vide le contenue de 'sstr'.
+    
+    start2 = trame.substr(2,2); //Enregistrement de deux Nombres à partir de 2.
+    sstr << start2; //Stock le contenue du string 'start2' dans le flux 'sstr'.
+    sstr >> hex >> start2i; //Enregistre le contenue du flux 'sstr' en hexa dans l'int 'start2i'.
+    sstr.clear();   //Vide le contenue de 'sstr'.
+    
+    Lenght = trame.substr(4,2); //Enregistrement de deux Nombres à partir de 4.
+    sstr << Lenght; //Stock le contenue du string 'Lenght' dans le flux 'sstr'.
+    sstr >> hex >> Lenghti; //Enregistre le contenue du flux 'sstr' en hexa dans l'int 'Lenghti'.
+    sstr.clear();   //Vide le contenue de 'sstr'.
+    
+    for (int a = 0; a<Lenghti; a++) {    //Tant que 'a' est inferieur à 'lenght'.
+        parametre = trame.substr(i, 2);//Enregistrement de deux Nombres à partir de i.
+        i = i+2;    //Incrémentation de 'i' afin de continuer à naviguer sur la chaine de caractère.
+        sstr << parametre;  //Stock le contenue du string 'parametre' dans le flux 'sstr'.
+        sstr >> hex >> tabParametrei[a]; //Enregistre le contenue du flux 'sstr' en hexa dans le tableau d'int 'tabParametrei[a]'.
+        sstr.clear();   //Vide le contenue de 'sstr'.
+    }
+    
+    checksum = trame.substr(i,2);   //Enregistrement de deux Nombres à partir de 'i'.
+    sstr << checksum;   //Stock le contenue du string 'checksum' dans le flux 'sstr'.
+    sstr >> hex >> checksumi;   //Enregistre le contenue du flux 'sstr' en hexa dans l'int 'checksumi'.
+    
+    vchecksum = start1i + start2i + Lenghti;    //Additionne les valeurs et les enregistres dans 'vchecksum'.
+    
+    wait (0.5);
+    led3 = 1;
+    
+    for (int b = 0; b<Lenghti; b++) {
+        vchecksum += tabParametrei[b];  //Ajoute chaque valeurs de 'tabParametrei[b]' dans 'vchecksum'.
+    }
+    if((vchecksum & 0xFF) == checksumi){    //Si le calcul du 'vchecksum' est égale a "checksumi"
+        //cout << "Trame valide" << endl;     //Trame validé.
+         for(int d = 0; d<10; d++){
+            led = 1;
+            wait (4.0);
+            }
+    }
+    else{
+        //cout << "Error 01-Checksum attendu '" << hex << uppercase << (vchecksum & 0xFF) << "'" << endl;  //Trame fausse.
+        for(int d = 0; d<10; d++){
+            led = 1;
+            wait (2.0);
+            led = 0;
+            wait (2.0);
+            }
+    }
+    return *tabParametrei[7];
+};
\ No newline at end of file