Révision 384
Ajouté par Mourougen MARIMOUTOU-POUGARY il y a presque 3 ans
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
Modification de la fonction traitement afin d'afficher l'etat de l'alarme pour chaque trame reçu.