Projet total V1

Dependencies:   mbed

main.cpp

Committer:
Paolo804
Date:
2016-06-15
Revision:
0:eac65d0c5a1c

File content as of revision 0:eac65d0c5a1c:

#include "mbed.h"
#include <fonctions_demodulation.h>
#include <fonctions_distance.h>


AnalogIn adc(A0);

int i,j,k;

#define NB_VALEURS 280
#define NB_VALEURS_BIT 36
#define NB_VALEURS_MOYENNE_HAUTE 10

float acquisition[NB_VALEURS];
float acquisition_distance[NB_VALEURS]; 
float seuil;

//Déclarations pour la distance


struct maximum valeur_max[3];
struct minimum valeur_min[3];
struct distance signal;
struct signal_caracteristiques signal_car;
//Valeurs 13 Juin : Mesure 1
//struct distance donnee[]={{562,458,260,0.3999}, {559,430,260,0.49},{524,396,223,0.57},{458,367,160,0.6},{413,345,111,0.6},{380,330,82,0.6},{368,324,73,0.59},{354,318,56,0.62},{341,313,45,0.61}};

//Valeurs 14 Juin : Mesure 2
//struct distance donnee[]={{565,454,275,0.4}, {560,418,270,0.53},{433,349,143,0.58},{389,329,98,0.59},{360,317,72,0.61},{338,307,50,0.61},{324,303,34,0.61},{316,300,26.5,0.61},{313,299,13.5,0.61}};

//Valeurs 14 Juin : Mesure 3 (2 47Ohm en parallèle)
struct distance donnee[]={{563,497,256,0.25}, {563,460,263,0.39},{562,434,257,0.49},{538,402,234,0.58},{464,368,156,0.6},{425,352,118,0.62},{389,336,85,0.625},{375,329,71,0.64},{360,323,57,0.64}};


int indice;
float moyenne;
//Fin déclarations pour la distance


int main() {
    char mot;
    float moyenne;
    mot=0x00;
    while(1){
        //Aquisition pour seuil_moyen
        for(i=0; i< NB_VALEURS; i++){
            acquisition[i]=adc.read();
        }
        seuil = 0;
        for(i=0; i< NB_VALEURS; i++){
            seuil += acquisition[i];
        }
        seuil /= NB_VALEURS;
        
        //Acquisition pour la démodulation
        while(adc.read() > seuil);
        while(adc.read() < seuil);
        for(i=0; i< NB_VALEURS; i++){
            acquisition[i]=adc.read();
        }
            //Reajustement du seuil :
            float max[NB_VALEURS_MOYENNE_HAUTE][2];
                //Moyenne des 1 :
                for(i=0;i<NB_VALEURS_MOYENNE_HAUTE;i++){
                    max[i][0] = 0; //initialisation des indices
                    max[i][1] = acquisition[0]; //initialisation des max
                }
                char already_max=0;
                for(i=0;i<NB_VALEURS_MOYENNE_HAUTE;i++){ //prise de 10 valeurs max
                    for(j=0;j < NB_VALEURS;j++){
                        for(k=0;k<i;k++){
                            if(j == max[k][0]){
                                already_max = 1;
                                break;
                            }
                            else already_max = 0;
                        }
                        if(acquisition[j] > max[i][1] && !already_max){
                             max[i][1] = acquisition[j];
                             max[i][0] = j;
                        }
                    } 
                }
                float moyenne_haute = 0;
                for(i=0;i<NB_VALEURS_MOYENNE_HAUTE;i++){
                    moyenne_haute += max[i][1];
                }
                moyenne_haute /= NB_VALEURS_MOYENNE_HAUTE;
                
                //moyenne des 0;
                
        for (i=0; i<8; i++){
            moyenne = 0;
            for (j=0;j<NB_VALEURS_BIT;j++){
                moyenne += acquisition[i*NB_VALEURS_BIT + j]; 
            }
            moyenne /= NB_VALEURS_BIT;
            mot |= (moyenne > seuil)?0x01:0x00;
            if (i == 7) break;
            mot = mot << 1;
        }

        for (i=0; i<8; i++){
            mot = decale_mot(mot);
            if(mot == 0xAC){
                printf("Mot present\n");
                break;
            }
        }
        
        //----------------------
        //MESURE DISTANCE
        //----------------------
        for(i=0;i<NB_VALEURS;i++){
            acquisition_distance[i] = acquisition[i]*1000;
        }
        for(i=0;i<NB_VALEURS;i++){
            moyenne += acquisition_distance[i];
        }
        moyenne /= NB_VALEURS;
        signal.moyenne=moyenne;
        init_tab_max(valeur_max, acquisition_distance[0]);
        init_tab_min(valeur_min, acquisition_distance[0]);
        have_max(acquisition_distance, valeur_max);
        signal.max = (valeur_max[0].valeur+valeur_max[1].valeur+valeur_max[2].valeur)/3;
        have_min(acquisition_distance, valeur_min);
        signal.min=(valeur_min[0].valeur+valeur_min[1].valeur+valeur_min[2].valeur)/3;
        signal.ecart=signal.max-signal.min;
        signal.rapport=(signal.max-signal.moyenne)/signal.ecart;
        printf("signal.max: %f\n", signal.max);
        printf("signal.min: %f\n", signal.min);
        printf("signal.moyenne: %f\n", signal.moyenne);
        printf("signal.ecart: %f\n", signal.ecart);
        printf("signal.rapport: %f\n", signal.rapport);
        
        init_struct(signal_car);
        verifff(signal, donnee, &signal_car);
        printf_SC(signal_car);
        printf("Distance : %f\n", calcul_distance_V2(signal, signal_car));
        
        
        //----------------------
        //FIN MESURE DISTANCE
        //----------------------
        
        wait(0.5);
    }
}