Révision 388
Ajouté par Mourougen MARIMOUTOU-POUGARY il y a presque 3 ans
branch/MARIMOUTOU_Mourougen/main.c | ||
---|---|---|
float Latitude;
|
||
float Longitude;
|
||
}Position;
|
||
|
||
Position P,P1,P2,P3,P4;
|
||
|
||
typedef struct
|
||
{
|
||
Position rpos;
|
||
float vitmax;
|
||
}Zone;
|
||
|
||
//Table des zones
|
||
//Table des zones dangereuses
|
||
|
||
Zone zones[]=
|
||
{
|
||
... | ... | |
return temp;
|
||
}
|
||
|
||
int test_decode_nombre()
|
||
int test_decode_nombre()//test de la fonction decode nombre
|
||
{
|
||
int verif=1;
|
||
if(decode_nombre("758961",2,0)!=75)
|
||
... | ... | |
}
|
||
}
|
||
|
||
float decode_latitude(char *trame )//Fonction qui extrait et decode la latitude d'un trame
|
||
float decode_latitude(char *trame )//Fonction qui extrait et converti la latitude d'une trame
|
||
{
|
||
float degres,reste,flottant,res;
|
||
int i=17;
|
||
... | ... | |
|
||
}
|
||
|
||
float decode_longitude(char *trame )//Fonction qui extrait et decode la longitude d'un trame
|
||
float decode_longitude(char *trame )//Fonction qui extrait et converti la longitude d'une trame
|
||
{
|
||
float degres,reste,flottant,res;
|
||
int i=30;
|
||
... | ... | |
return res;
|
||
|
||
}
|
||
/*
|
||
Position decode_position(char *trame,Position* P)//Fonction qui stocke la latitude dans la structure Position
|
||
{
|
||
P->Latitude=decode_latitude(&trame);
|
||
P->Longitude=decode_latitude(&trame);
|
||
}
|
||
*/
|
||
|
||
float decode_trame(char *trame,Position *P)//Fonction qui extrait la position(latitude,longitude) pour les trame trame valide
|
||
float decode_trame(char *trame,Position *P)//Fonction qui extrait la position(latitude,longitude)
|
||
{
|
||
P->Latitude=decode_latitude(trame);
|
||
P->Longitude=decode_longitude(trame);
|
||
|
||
}
|
||
|
||
float calcul_distance(Position *p_1,Position *p_2)
|
||
float calcul_distance(Position p_1,Position p_2)//Calcul de la distance entre 2 positions
|
||
{
|
||
float D;
|
||
float R_terre=6371.0;
|
||
D=((6.28*R_terre)/360.0)*sqrt(((p_2->Longitude-p_1->Longitude),2)+pow((p_2->Latitude-p_1->Latitude),2));
|
||
D=((6.28*R_terre)/360.0)*sqrt((p_2.Longitude-p_1.Longitude)*(p_2.Longitude-p_1.Longitude)+(p_2.Latitude-p_1.Latitude)*(p_2.Latitude-p_1.Latitude));
|
||
|
||
return D;
|
||
}
|
||
|
||
float calcul_vitesse(Position *p_1,Position *p_2)
|
||
float calcul_vitesse(Position p_1,Position p_2)//Calcul de la vitesse entre 2 positions
|
||
{
|
||
float Vitesse=(calcul_distance(&p_1,&p_2))*3600.0;
|
||
float Vitesse=(calcul_distance(p_1,p_2)*3600.0);
|
||
return Vitesse;
|
||
}
|
||
|
||
... | ... | |
{
|
||
int i;
|
||
int j=0;
|
||
float distance_init=calcul_distance(&p,&r[0].rpos);//Initialisation d'une distance initial de reference
|
||
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);
|
||
*d=calcul_distance(p,r[i].rpos);
|
||
if(*d<=distance_init)
|
||
{
|
||
j=i;
|
||
... | ... | |
|
||
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");
|
||
decode_trame("$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D",&pos_init);
|
||
|
||
float distance,vitesse;
|
||
float seuil=5089.0;//Definition du seuil en evaluant les distance retourner afin de valider le foncionnement du bloc
|
||
float seuil=5100.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);
|
||
vitesse=calcul_vitesse(p,pos_init);
|
||
distance=calcul_distance(p,pos_init);
|
||
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("Vitesse limite? 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
|
||
{
|
||
... | ... | |
|
||
}
|
||
}
|
||
}
|
||
}
|
||
/*Remarque de code*/
|
||
/*
|
||
On remarque que la distance renvoyer par la fonction distance_de_la_plus_proche
|
||
Ce qui fait que le seuil defini et faux cependant permet de tester un code
|
||
qui decrit l'etat de l'alarme.
|
||
Un probleme se retrouve eq
|
||
|
||
|
||
*/
|
||
|
||
//Ajouter vos tests unitaires dans cette fonction.
|
||
void tests_unitaires(void){
|
Formats disponibles : Unified diff
finalisation du code et commentaire