
Helmotz
Dependencies: mbed
Lecture.cpp
- Committer:
- Cointepas
- Date:
- 2017-05-18
- Revision:
- 0:8d7791a3b914
File content as of revision 0:8d7791a3b914:
#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]; };