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];
};