Labview --> Mbed
Dependencies: mbed
Diff: Lecture.cpp
- Revision:
- 0:fd1f4504889d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lecture.cpp Thu May 04 15:14:18 2017 +0000 @@ -0,0 +1,91 @@ +#include <mbed.h> +#include <iostream> +#include <iomanip> +#include <math.h> +#include <sstream> +#include <Lecture.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[30]; //'parametre‘ converti en int et stocké dans le tableau. +char tabctrame[34]; + +void lecturetrame() +{ + led2 = 1; + Dtrame.gets(tabctrame, 34); + 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); + } + } +}; \ No newline at end of file