Révision 409
Ajouté par Awa Semou FAYE il y a presque 3 ans
main.c | ||
---|---|---|
"$GPVTG,99.4,T,,M,0.4,N,0.7,K*57",
|
||
"$GPZDA,141914.00,01,02,2006,00,00*69",
|
||
0};
|
||
//declaration de la structure position contenant la latitude et la longitude
|
||
typedef struct {
|
||
float latitude;
|
||
float longitude;
|
||
} Position ;
|
||
|
||
// declaration d'une stucture permettant de decrire une zone renseignant la position et la vitesse limite associ?e
|
||
typedef struct {
|
||
Position rpos;
|
||
float vitmax;
|
||
} Zone ;
|
||
|
||
//cr?ation d'une table de zone dangereuse
|
||
Zone zones[] = {
|
||
{{44.7887762, -3.012}, 50}, /* Descripteur de la premi?re zone */
|
||
{{44.7891220, -3,013}, 70},
|
||
{{45.7891220, 3,013}, 90},
|
||
|
||
|
||
};
|
||
//fonction qui permet de savoir si la trame commence par la chaine de caractere type(GPGGA)
|
||
int trame_cmp(char* trame, char* type) //prise en paramete de la trame envoy?e et du type
|
||
{
|
||
... | ... | |
}
|
||
return s;
|
||
}
|
||
//declaration de la structure position contenant la latitude et la longitude
|
||
typedef struct {
|
||
float latitude;
|
||
float longitude;
|
||
} Position ;
|
||
|
||
|
||
// fonction qui convertit la latitude en un nombre flottant
|
||
... | ... | |
//exempletrame="$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D",
|
||
if (trame_cmp(trame,"GPGGA")) //on utilise la fonction trame_cmp pour savoir si la trame a le bon format GPGGA
|
||
{
|
||
(*position).latitude=conversionLatitude(trame+17);//on recupere la position en latitude en acccedant au champ de la latitude dans la trame
|
||
(*position).longitude=conversionLongitude(trame+29);//on recupere la position en longitude en acccedant au champ de la longitude dans la trame
|
||
position->latitude=conversionLatitude(trame+17);//on recupere la position en latitude en acccedant au champ de la latitude dans la trame
|
||
position->longitude=conversionLongitude(trame+29);//on recupere la position en longitude en acccedant au champ de la longitude dans la trame
|
||
return 1;//on retourne 1 pour montrer qu'on a le trame type GPGGA et qu'on a recuper? la position en latitude et longitude
|
||
}
|
||
return 0;//on retourne 0 sinon, la trame est ignor?e
|
||
... | ... | |
float calcul_distance(Position P1, Position P2)
|
||
{
|
||
float distance;//variable contenant la distance calcul?e entre ces deux points
|
||
distance=(40000/360)*sqrt(pow((P2.latitude-P1.latitude),2))+ (pow((P2.longitude-P1.longitude),2));//40000(perimetre de la terre)/360(degr?)=111km ->1?=111km sur terre
|
||
distance=(40000/360)*sqrt((P2.latitude-P1.latitude)*(P2.latitude-P1.latitude)+ (P2.longitude-P1.longitude)*(P2.longitude-P1.longitude));//40000(perimetre de la terre)/360(degr?)=111km ->1?=111km sur terre
|
||
return distance; //on revoie la valeur du la distance calcul?e
|
||
|
||
}
|
||
... | ... | |
return vitesse; //on revoie la valeur du la vistesse calcul?e
|
||
}
|
||
|
||
// declaration d'une stucture permettant de decrire une zone renseignant la position et la vitesse limite associ?e
|
||
typedef struct {
|
||
Position rpos;
|
||
float vitmax;
|
||
} Zone ;
|
||
|
||
//cr?ation d'une table de zone dangereuse
|
||
Zone zones[] = {
|
||
{{44.7887762, -3.012}, 50}, /* Descripteur de la premi?re zone */
|
||
{{44.7891220, -3,013}, 70},
|
||
{{45.7891220, 3,013}, 90},
|
||
|
||
|
||
};
|
||
//fonction qui calcule la distance ? la plus proche zone
|
||
int distance_a_la_proche_zone(Position p, Zone r[],int nb_zones, float *d)
|
||
{
|
||
float diCalculee;// variables contenant la valeur de la distance calculee entre la position courante et l element[i] du tableau de zones dangereuses
|
||
int i, index;//i=variable pour parcourir tout le tableau de zones et index=i qui minimise le tableau de zones par rapport a la distance calculee
|
||
int i, index=0;//i=variable pour parcourir tout le tableau de zones et index=i qui minimise le tableau de zones par rapport a la distance calculee, elle correspond a la valeur de i pour laquelle on se situe a la zone la plus proche
|
||
*d=calcul_distance(p,r[0].rpos);//on calcule la distance entre la position courante du vehicule et le premier element du tableau de zones dangereuses
|
||
if(nb_zones>0)
|
||
{
|
||
... | ... | |
}
|
||
}
|
||
return index;
|
||
return d;
|
||
}
|
||
return -1;// on retourne -1 si la table est vide
|
||
|
||
}else
|
||
return -1;// on retourne -1 si la table est vide
|
||
|
||
}
|
||
|
||
|
||
... | ... | |
|
||
//Ajouter vos tests unitaires dans cette fonction.
|
||
void tests_unitaires(void)
|
||
{
|
||
{
|
||
//variables concernant les tests unitaires calcul_vitesse et calcul_distance
|
||
Position P1={45.75040333,3.110065};
|
||
Position P2={45.7500,3.11006};
|
||
//variable concernant le test unitaire decode_trame
|
||
Position * position;
|
||
//variables concernant le test unitaire distance_a_la_proche_zone
|
||
Position p;
|
||
p.latitude=45.7500;
|
||
p.longitude=3.11006;
|
||
int nb_zones=3;
|
||
float d;
|
||
//test unutaire basique
|
||
if (5!=5){
|
||
//test unutaire basique
|
||
|
||
printf ("Erreur Test unitaire basique.\n");
|
||
exit(-1);
|
||
}
|
||
|
||
//tests unutaires de la fonction trame_cmp
|
||
if (trame_cmp("$GPGGA suite chaine","GPGGA")!=1){
|
||
printf ("Erreur Test unitaire trame_cmp.\n");
|
||
... | ... | |
|
||
//tests unutaires de la fonction conversionLatitude
|
||
|
||
if (conversionLatitude("3723.2475")-37,38745833 > 0.0001){
|
||
if (conversionLatitude("3723.2475")-37.38745833 > 0.0001){
|
||
printf ("Erreur Test unitaire conversion Latitude.\n");
|
||
exit(-1);
|
||
}
|
||
|
||
if (conversionLatitude("4545.0000")-45.7500 > 0.0001){
|
||
if (conversionLatitude("4545.0000")-45.7500 > 0.0001){
|
||
printf ("Erreur Test unitaire conversion Latitude.\n");
|
||
exit(-1);
|
||
}
|
||
}
|
||
|
||
//tests unutaires de la fonction conversionLongitude
|
||
|
||
... | ... | |
exit(-1);
|
||
}
|
||
//tests unutaires de la fonction decode_trame
|
||
/* if(decode_trame
|
||
/* if(decode_trame("$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D",position)==0){
|
||
printf("Erreur Test decode trame \n");
|
||
exit(-1);
|
||
}
|
||
}*/
|
||
|
||
|
||
//tests unutaires de la fonction calcul_distance
|
||
if (calcul_distance("00306.6036")- 3.11006 > 0.0001){
|
||
printf ("Erreur Test unitaire calcul_distance.\n");
|
||
exit(-1);
|
||
if (calcul_distance(P1,P2)- 0.0448 > 0.0001){
|
||
printf ("Erreur Test unitaire calcul_distance.\n");
|
||
exit(-1);
|
||
}
|
||
|
||
//tests unutaires de la fonction calcul_vitesse
|
||
if (calcul_vitesse("00306.6036")- 3.11006 > 0.0001){
|
||
printf ("Erreur Test unitaire calcul_vitesse.\n");
|
||
exit(-1);
|
||
}
|
||
//tests unutaires de la fonction calcul_distance_a_la_proche_zone
|
||
if (conversionLongitude("00306.6036")- 3.11006 > 0.0001){
|
||
printf ("Erreur Test unitaire calcul_distance_a_la_proche_zone.\n");
|
||
exit(-1);
|
||
}*/
|
||
// Test unitaire de la fonction_generique
|
||
if (fonction_generique(",4545.0242") - 45.75040333 > 0.0001 )
|
||
/* if (calcul_vitesse(P1,P2)-161.28 > 0.0001){
|
||
printf ("Erreur Test unitaire calcul_vitesse.\n");
|
||
exit(-1);
|
||
}*/
|
||
|
||
//tests unutaires de la fonction distance_a_la_proche_zone
|
||
if (distance_a_la_proche_zone(P1,zones,nb_zones,&d)!=2){
|
||
printf ("Erreur Test unitaire distance_a_la_proche_zone.\n");
|
||
exit(-1);
|
||
}
|
||
// Test unitaire de la fonctionGenerique
|
||
/* if (fonctionGenerique("4545.0242") - 45.75040333 > 0.0001 )
|
||
{
|
||
printf("Erreur Test unitaire conversion latitude !!! \n");
|
||
exit(-1);
|
||
printf("Erreur Test unitaire conversion latitude !!! \n");
|
||
exit(-1);
|
||
}
|
||
if (fonction_generique("00306.6039")- 3.110065 > 0.0001)
|
||
if (fonctionGenerique("00306.6039")- 3.110065 > 0.0001)
|
||
{
|
||
printf("Erreur Test unitaire conversion longitude !!! \n");
|
||
exit(-1);
|
||
}
|
||
printf("Erreur Test unitaire conversion longitude !!! \n");
|
||
exit(-1);
|
||
}*/
|
||
}
|
||
|
||
|
Formats disponibles : Unified diff
test unitaire decode trame distance_proche_zone calcul_vitesse