Projet

Général

Profil

« Précédent | Suivant » 

Révision 384

Modification de la fonction traitement afin d'afficher l'etat de l'alarme pour chaque trame reçu.

Voir les différences:

branch/MARIMOUTOU_Mourougen/main.c
float decode_trame(char *trame,Position *P)//Fonction qui extrait la position(latitude,longitude) pour les trame trame valide
{
if(trame_cmp(trame,"GPPGA")==1)
{
P->Latitude=decode_latitude(trame);
P->Longitude=decode_longitude(trame);
}
P->Latitude=decode_latitude(trame);
P->Longitude=decode_longitude(trame);
}
float calcul_distance(Position *p_1,Position *p_2)
......
return D;
}
float calcul_vitesse(Position p_1,Position p_2)
float calcul_vitesse(Position *p_1,Position *p_2)
{
int R_terre=6371;
float Vitesse=(calcul_distance(&p_1,&p_2))*3600;
float Vitesse=(calcul_distance(&p_1,&p_2))*3600.0;
return Vitesse;
}
int distance_a_la_plus_proche_zone(Position p,Zone r[],int nb_zones,float*d)//fonction qui retourne l'indice de la position de la plus proche zone
{
int i,j;
float pos_init=calcul_distance(&p,&r[0].rpos);//Initialisation d'une position initial de reference
int i;
int j=0;
float distance_init=calcul_distance(&p,&r[0].rpos);//Initialisation d'une distance initial de reference
if(nb_zones>0){
for(i=1;i<nb_zones;i++)
{
*d=calcul_distance(&p,&r[i].rpos);
if(*d<=pos_init)
if(*d<=distance_init)
{
j=i;
pos_init=*d;
distance_init=*d;
}
}
return j;
......
int test_distance_de_la_plus_proche_zone()
{
float distance;
P.Latitude=decode_latitude("$GPGGA,141917.00,4545.0726,N,00306.6039,E,1,05,3.4,499.6,M,,M,,*73");
P.Longitude=decode_longitude("$GPGGA,141917.00,4545.0726,N,00306.6039,E,1,05,3.4,499.6,M,,M,,*73");
P.Latitude=decode_latitude("$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D");
P.Longitude=decode_longitude("$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D");
int indice=distance_a_la_plus_proche_zone(P,zones,strlen(zones),&distance);
int indice=distance_a_la_plus_proche_zone(P,zones,sizeof(zones),&distance);
if(indice!=1 && fabs(distance-4980.238)>0.01)
{
printf("erreur distance de la plus proche zone");
exit(-1);
}
return indice;
......
//Fonction ? modifier !!!!!
void traitement(char * trame)
{
/*
static int cpt=0;
if(trame_cmp(trame,"GPGGA")==1)
{
printf ("> %s\n",trame);
cpt++;
}
*/
Position pos_init,p;
//initialisation d'une position initiale a partir d'une trame de test valide
pos_init.Latitude=decode_latitude("$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D");
pos_init.Longitude=decode_longitude("$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D");
float distance,vitesse;
float seuil=5089.0;//Definition du seuil en evaluant les distance retourner afin de valider le foncionnement du bloc
int indice;
if(trame_cmp(trame,"GPGGA")==1)
{
printf ("> %s\n",trame);
decode_trame(trame,&p);
printf("Latitude:%f\nLongitude:%f\n",p.Latitude,p.Longitude);
vitesse=calcul_vitesse(&pos_init,&p);
indice=distance_a_la_plus_proche_zone(p,zones,sizeof(zones),&distance);
if(distance<seuil && vitesse>zones[indice].vitmax)
{
printf("alarme on\n");
printf("Vitesse limiter a :%f\n",vitesse);
printf("Distance de:%f\n\n",distance);
printf("debug:%f\n\n",calcul_distance(&pos_init,&p));
printf("debug:%f\n\n",calcul_vitesse(&pos_init,&p));
}else
{
printf("alarme off\n");
pos_init=p;
}
}
}
......
printf("distance Paris-Toulouse : %f\n",calcul_distance(&P1,&P3));
*/
//Test de la fonction distance la plus proche
/*
printf("%f\n",decode_latitude("$GPGGA,141917.00,4545.0726,N,00306.6039,E,1,05,3.4,499.6,M,,M,,*73"));
printf("%f\n",decode_longitude("$GPGGA,141917.00,4545.0726,N,00306.6039,E,1,05,3.4,499.6,M,,M,,*73"));
......
printf("distance 1 : %f\n",calcul_distance(&P,&P1));
printf("distance 2 : %f\n",calcul_distance(&P,&P2));
printf("%d\n",strlen(zones));
printf("%d\n",test_distance_de_la_plus_proche_zone());
*/
//Test de la fonctionn distance de la plus proche zone
/*
test_distance_de_la_plus_proche_zone();
*/
}

Formats disponibles : Unified diff