Helmotz
Dependencies: mbed
Lecture.cpp@0:8d7791a3b914, 2017-05-18 (annotated)
- Committer:
- Cointepas
- Date:
- Thu May 18 10:25:12 2017 +0000
- Revision:
- 0:8d7791a3b914
Programme principal
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Cointepas | 0:8d7791a3b914 | 1 | #include <mbed.h> |
Cointepas | 0:8d7791a3b914 | 2 | #include <iostream> |
Cointepas | 0:8d7791a3b914 | 3 | #include <iomanip> |
Cointepas | 0:8d7791a3b914 | 4 | #include <sstream> |
Cointepas | 0:8d7791a3b914 | 5 | #include <Fonction.h> |
Cointepas | 0:8d7791a3b914 | 6 | |
Cointepas | 0:8d7791a3b914 | 7 | using namespace std; |
Cointepas | 0:8d7791a3b914 | 8 | |
Cointepas | 0:8d7791a3b914 | 9 | DigitalOut led(LED1); |
Cointepas | 0:8d7791a3b914 | 10 | DigitalOut led2(LED2); |
Cointepas | 0:8d7791a3b914 | 11 | DigitalOut led3(LED3); |
Cointepas | 0:8d7791a3b914 | 12 | string trame; //Trame complète. |
Cointepas | 0:8d7791a3b914 | 13 | Serial Dtrame(p13, p14, 9600); //(tx, rx, baud) |
Cointepas | 0:8d7791a3b914 | 14 | int i = 6; //Iterateur. |
Cointepas | 0:8d7791a3b914 | 15 | stringstream sstr; //stringstream permet de faire la liaison entre le string de départ et le int sortant. |
Cointepas | 0:8d7791a3b914 | 16 | int vchecksum; //Octet permetant le controle de 'checksumi'. |
Cointepas | 0:8d7791a3b914 | 17 | string start1; //Octet de start. |
Cointepas | 0:8d7791a3b914 | 18 | int start1i; //'start1' converti en int. |
Cointepas | 0:8d7791a3b914 | 19 | string start2; //Octet de start. |
Cointepas | 0:8d7791a3b914 | 20 | int start2i; //'start2' converti en int. |
Cointepas | 0:8d7791a3b914 | 21 | string Lenght; //Octet du nombre de parametre. |
Cointepas | 0:8d7791a3b914 | 22 | int Lenghti; //'Lenght' converti en int. |
Cointepas | 0:8d7791a3b914 | 23 | string checksum; //Octet du checksum. |
Cointepas | 0:8d7791a3b914 | 24 | int checksumi; //'checksum' converti en int. |
Cointepas | 0:8d7791a3b914 | 25 | string parametre; //Octet de parametre. |
Cointepas | 0:8d7791a3b914 | 26 | int tabParametrei[7]; //'parametre‘ converti en int et stocké dans le tableau. |
Cointepas | 0:8d7791a3b914 | 27 | char tabctrame[7]; |
Cointepas | 0:8d7791a3b914 | 28 | |
Cointepas | 0:8d7791a3b914 | 29 | int* lecturetrame() |
Cointepas | 0:8d7791a3b914 | 30 | { |
Cointepas | 0:8d7791a3b914 | 31 | led2 = 1; |
Cointepas | 0:8d7791a3b914 | 32 | Dtrame.gets(tabctrame, 7); |
Cointepas | 0:8d7791a3b914 | 33 | trame = tabctrame; |
Cointepas | 0:8d7791a3b914 | 34 | wait (2.0); |
Cointepas | 0:8d7791a3b914 | 35 | led2 = 0; |
Cointepas | 0:8d7791a3b914 | 36 | led3 = 0; |
Cointepas | 0:8d7791a3b914 | 37 | //cout << "Entrer la trame :" << endl; |
Cointepas | 0:8d7791a3b914 | 38 | //cin >> trame; |
Cointepas | 0:8d7791a3b914 | 39 | start1 = trame.substr(0,2); //Enregistrement de deux Nombres à partir de 0. |
Cointepas | 0:8d7791a3b914 | 40 | sstr << start1; //Stock le contenue du string 'start1' dans le flux 'sstr'. |
Cointepas | 0:8d7791a3b914 | 41 | sstr >> hex >> start1i; //Enregistre le contenue du flux 'sstr' en hexa dans l'int 'start1i'. |
Cointepas | 0:8d7791a3b914 | 42 | sstr.clear(); //Vide le contenue de 'sstr'. |
Cointepas | 0:8d7791a3b914 | 43 | |
Cointepas | 0:8d7791a3b914 | 44 | start2 = trame.substr(2,2); //Enregistrement de deux Nombres à partir de 2. |
Cointepas | 0:8d7791a3b914 | 45 | sstr << start2; //Stock le contenue du string 'start2' dans le flux 'sstr'. |
Cointepas | 0:8d7791a3b914 | 46 | sstr >> hex >> start2i; //Enregistre le contenue du flux 'sstr' en hexa dans l'int 'start2i'. |
Cointepas | 0:8d7791a3b914 | 47 | sstr.clear(); //Vide le contenue de 'sstr'. |
Cointepas | 0:8d7791a3b914 | 48 | |
Cointepas | 0:8d7791a3b914 | 49 | Lenght = trame.substr(4,2); //Enregistrement de deux Nombres à partir de 4. |
Cointepas | 0:8d7791a3b914 | 50 | sstr << Lenght; //Stock le contenue du string 'Lenght' dans le flux 'sstr'. |
Cointepas | 0:8d7791a3b914 | 51 | sstr >> hex >> Lenghti; //Enregistre le contenue du flux 'sstr' en hexa dans l'int 'Lenghti'. |
Cointepas | 0:8d7791a3b914 | 52 | sstr.clear(); //Vide le contenue de 'sstr'. |
Cointepas | 0:8d7791a3b914 | 53 | |
Cointepas | 0:8d7791a3b914 | 54 | for (int a = 0; a<Lenghti; a++) { //Tant que 'a' est inferieur à 'lenght'. |
Cointepas | 0:8d7791a3b914 | 55 | parametre = trame.substr(i, 2);//Enregistrement de deux Nombres à partir de i. |
Cointepas | 0:8d7791a3b914 | 56 | i = i+2; //Incrémentation de 'i' afin de continuer à naviguer sur la chaine de caractère. |
Cointepas | 0:8d7791a3b914 | 57 | sstr << parametre; //Stock le contenue du string 'parametre' dans le flux 'sstr'. |
Cointepas | 0:8d7791a3b914 | 58 | sstr >> hex >> tabParametrei[a]; //Enregistre le contenue du flux 'sstr' en hexa dans le tableau d'int 'tabParametrei[a]'. |
Cointepas | 0:8d7791a3b914 | 59 | sstr.clear(); //Vide le contenue de 'sstr'. |
Cointepas | 0:8d7791a3b914 | 60 | } |
Cointepas | 0:8d7791a3b914 | 61 | |
Cointepas | 0:8d7791a3b914 | 62 | checksum = trame.substr(i,2); //Enregistrement de deux Nombres à partir de 'i'. |
Cointepas | 0:8d7791a3b914 | 63 | sstr << checksum; //Stock le contenue du string 'checksum' dans le flux 'sstr'. |
Cointepas | 0:8d7791a3b914 | 64 | sstr >> hex >> checksumi; //Enregistre le contenue du flux 'sstr' en hexa dans l'int 'checksumi'. |
Cointepas | 0:8d7791a3b914 | 65 | |
Cointepas | 0:8d7791a3b914 | 66 | vchecksum = start1i + start2i + Lenghti; //Additionne les valeurs et les enregistres dans 'vchecksum'. |
Cointepas | 0:8d7791a3b914 | 67 | |
Cointepas | 0:8d7791a3b914 | 68 | wait (0.5); |
Cointepas | 0:8d7791a3b914 | 69 | led3 = 1; |
Cointepas | 0:8d7791a3b914 | 70 | |
Cointepas | 0:8d7791a3b914 | 71 | for (int b = 0; b<Lenghti; b++) { |
Cointepas | 0:8d7791a3b914 | 72 | vchecksum += tabParametrei[b]; //Ajoute chaque valeurs de 'tabParametrei[b]' dans 'vchecksum'. |
Cointepas | 0:8d7791a3b914 | 73 | } |
Cointepas | 0:8d7791a3b914 | 74 | if((vchecksum & 0xFF) == checksumi){ //Si le calcul du 'vchecksum' est égale a "checksumi" |
Cointepas | 0:8d7791a3b914 | 75 | //cout << "Trame valide" << endl; //Trame validé. |
Cointepas | 0:8d7791a3b914 | 76 | for(int d = 0; d<10; d++){ |
Cointepas | 0:8d7791a3b914 | 77 | led = 1; |
Cointepas | 0:8d7791a3b914 | 78 | wait (4.0); |
Cointepas | 0:8d7791a3b914 | 79 | } |
Cointepas | 0:8d7791a3b914 | 80 | } |
Cointepas | 0:8d7791a3b914 | 81 | else{ |
Cointepas | 0:8d7791a3b914 | 82 | //cout << "Error 01-Checksum attendu '" << hex << uppercase << (vchecksum & 0xFF) << "'" << endl; //Trame fausse. |
Cointepas | 0:8d7791a3b914 | 83 | for(int d = 0; d<10; d++){ |
Cointepas | 0:8d7791a3b914 | 84 | led = 1; |
Cointepas | 0:8d7791a3b914 | 85 | wait (2.0); |
Cointepas | 0:8d7791a3b914 | 86 | led = 0; |
Cointepas | 0:8d7791a3b914 | 87 | wait (2.0); |
Cointepas | 0:8d7791a3b914 | 88 | } |
Cointepas | 0:8d7791a3b914 | 89 | } |
Cointepas | 0:8d7791a3b914 | 90 | return *tabParametrei[7]; |
Cointepas | 0:8d7791a3b914 | 91 | }; |