Révision 640
Ajouté par mamoisan il y a presque 4 ans
main.c | ||
---|---|---|
return latDec;//on retourne cette valeur
|
||
}
|
||
|
||
long latDMStoDec2(char * lat_DMS)//lat_DMS est sous la forme : 3723.2475
|
||
{
|
||
long deg = decode_nombre2(lat_DMS,2)*10000;//les degr?s de la latitude sont les 2 premiers chiffres on les d?code ainsi avec decode_nombre pour les convertir en flottant
|
||
long min = decode_int(lat_DMS[2])*100000+(decode_int(lat_DMS[3])*10000)+(1*decode_int(lat_DMS[5])*1000)+(0.01*decode_int(lat_DMS[6])*100)+(10*decode_int(lat_DMS[7]))+decode_int(lat_DMS[8]);//on d?compose les minutes en d?codant chiffre apr?s chiffre ? l'aide de decode_int
|
||
long latDec = deg*60+min;//la latitude en d?cimal est le nombre de degr?s + le nombre de minutes divis? par 60
|
||
return latDec;//on retourne cette valeur
|
||
}
|
||
|
||
//test unitaire permettant de voir si latDMStoDec fonctionne (il peut y avoir une erreur de pr?cision)
|
||
void test_latDMStoDec(void)
|
||
{
|
||
if (latDMStoDec("3723.2475")!= 37.387458){
|
||
printf ("Erreur Test latDMStoDec.%f\n", latDMStoDec("3723.2475"));
|
||
if (latDMStoDec("3723.2475")!= 37.387459){
|
||
printf ("Erreur Test latDMStoDec. \n");
|
||
latDMStoDec("3723.2475");
|
||
exit(-1);
|
||
}
|
||
}
|
||
|
||
void test_latDMStoDec2(void)
|
||
{
|
||
if (latDMStoDec2("3723.2475")!= 37.387459){
|
||
printf ("Erreur Test latDMStoDec. \n");
|
||
latDMStoDec("3723.2475");
|
||
exit(-1);
|
||
}
|
||
}
|
||
|
||
//fonction convertissant la cha?ne de caract?re contenant la longitude en nombre flottant
|
||
//on effectue le m?me raisonnement sauf que lon_DMS est sous la forme 00306.6036 c'est-?-dire un charact?re de plus que lat_DMS
|
||
float lonDMStoDec(char * lon_DMS)
|
||
... | ... | |
return lonDec;
|
||
}
|
||
|
||
long lonDMStoDec2(char * lon_DMS)
|
||
{
|
||
long deg = decode_nombre(lon_DMS,3)*10000;
|
||
long min = (100000*decode_int(lon_DMS[3])*10)+(10000*decode_int(lon_DMS[4]))+(1000*decode_int(lon_DMS[6]))+(100*decode_int(lon_DMS[7]))+(10*decode_int(lon_DMS[8]))+decode_int(lon_DMS[9]);
|
||
long lonDec = deg*60+min;
|
||
return lonDec;
|
||
}
|
||
|
||
//test unitaire permettant de voir si lonDMStoDec fonctionne (il peut y avoir une erreur de pr?cision)
|
||
void test_lonDMStoDec(void)
|
||
{
|
||
if (latDMStoDec("00306.6036")!= 3.11006){
|
||
printf ("Erreur Test latDMStoDec. %f\n",latDMStoDec("00306.6036"));
|
||
printf ("Erreur Test latDMStoDec.\n");
|
||
exit(-1);
|
||
}
|
||
}
|
||
|
||
void test_lonDMStoDec2(void)
|
||
{
|
||
if (latDMStoDec2("00306.6036")!= 3.11006){
|
||
printf ("Erreur Test latDMStoDec.\n");
|
||
exit(-1);
|
||
}
|
||
}
|
||
|
||
//on rassemble les deux derni?res fonctions pour n'en faire qu'une seule
|
||
float lontlatDMStoDec(char * coord)
|
||
{
|
||
... | ... | |
{
|
||
if(trame_cmp(trame,"GPGGA")==1)//si la trame commence par les 5 premiers caract?res que l'on souhaite
|
||
{
|
||
//d?finition des variable
|
||
char *lon;
|
||
char *lat;
|
||
char lat[8];
|
||
char lon[9];
|
||
int i;
|
||
for(i=0;i<=7;i++){
|
||
lat[i]=trame[i+17];
|
||
... | ... | |
for(i=0;i<=8;i++){
|
||
lon[i]=trame[i+29];
|
||
}
|
||
p->latitude = latDMStoDec(*lat);//on "traduit" la latitude de char ? flottant pour pouvoir les utiliser
|
||
p->longitude = lonDMStoDec(*lon);// on fait de m?me avec la longitude
|
||
p->longitude = lonDMStoDec(lon);// on fait de m?me avec la longitude
|
||
p->latitude = latDMStoDec(lat);//on "traduit" la latitude de char ? flottant pour pouvoir les utiliser
|
||
if((p->latitude>=0)&&(p->latitude<=90)){
|
||
if((p->longitude>=0)&&(p->longitude<=180))//v?rification dut format de la longitude et de la latitude
|
||
{
|
||
... | ... | |
}
|
||
|
||
|
||
//petite fonction permettant de transform? les degr?s en radiant
|
||
//petite fonction permettant de transform? les degr?s en radian
|
||
float deg2rad(deg)
|
||
{
|
||
return deg * (M_PI/180);
|
||
... | ... | |
test_decode_int();
|
||
test_latDMStoDec();
|
||
test_lonDMStoDec();
|
||
test_latDMStoDec2();
|
||
test_lonDMStoDec2();
|
||
test_decode_nombre2();
|
||
test_decode_trame();
|
||
}
|
Formats disponibles : Unified diff
test durée de certaines fonction des premiers TPs + vérification du clavier et de l'écran LCD