Helmotz

Dependencies:   mbed

Committer:
Cointepas
Date:
Thu May 18 10:25:12 2017 +0000
Revision:
0:8d7791a3b914
Programme principal

Who changed what in which revision?

UserRevisionLine numberNew 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 };