Projet

Général

Profil

« Précédent | Suivant » 

Révision 388

finalisation du code et commentaire

Voir les différences:

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