Révision 891
Ajouté par megoutteno il y a presque 4 ans
branch/Gouttenoire/sp4a12/main.c | ||
---|---|---|
"$GPZDA,141914.00,01,02,2006,00,00*69",
|
||
0};
|
||
// test de la fonction decode_int
|
||
int decode_int(char c)
|
||
int decode_int(char c) // en evoyant un nombre entre 0 et 9 on doit recuperer cette valeur et si A est envoy? nous devons retourner -1
|
||
{
|
||
int res;
|
||
if (c>='0' && c<='9')
|
||
... | ... | |
// r?alisation de la fonction decode_nombre
|
||
int decode_nombre(char * ch, int nbr)
|
||
{
|
||
|
||
|
||
int i , b=0;
|
||
|
||
for(i=0;i<nbr;i++)
|
||
{
|
||
b=10*b+decode_int(ch[i]);
|
||
b=10*b+decode_int(ch[i]); // avec la valeur de Nbr on recupere les nbr premiers chiffres de ch
|
||
}
|
||
return b;
|
||
}
|
||
... | ... | |
{
|
||
float lat_s=0,lat_f=0,x=0,lat_s_2=0;
|
||
int cpt=0,i=0,c=0,cpt_2=0;
|
||
while(ch[i]!= '.')
|
||
while(ch[i]!= '.') // compte le nombre de caract?re de ch jusqu'a la virgule
|
||
{
|
||
i++;
|
||
cpt++;
|
||
}
|
||
i=0;
|
||
while(ch[i]!='\0')
|
||
while(ch[i]!='\0') // compte le nombre de caract?re de ch
|
||
{
|
||
i++;
|
||
cpt_2++;
|
||
}
|
||
c=decode_nombre(ch,2);
|
||
c=decode_nombre(ch,2); // c recupere les 2 premiers chiffres de ch
|
||
for(i=0;i<cpt;i++)
|
||
{
|
||
lat_s=10*lat_s+decode_int(ch[i]);
|
||
lat_s=10*lat_s+decode_int(ch[i]); // calcul qui permet de r?cup?rer la valeur de ch avant la virgule
|
||
}
|
||
for(i=cpt+1;i<cpt_2;i++)
|
||
{
|
||
lat_s_2=lat_s_2*10+decode_int(ch[i]);
|
||
lat_s_2=lat_s_2*10+decode_int(ch[i]); // calcul qui permet de r?cup?rer la valeur de ch apres la virgule
|
||
}
|
||
lat_s=lat_s+(lat_s_2/pow(10,cpt+1));
|
||
lat_s=lat_s+(lat_s_2/pow(10,cpt+1)); // lat_s=ch
|
||
|
||
lat_f= ((lat_s-c*pow(10,cpt-2))/60)+c;
|
||
lat_f= ((lat_s-c*pow(10,cpt-2))/60)+c; // convertit ch en d?cimale
|
||
return lat_f;
|
||
}
|
||
// fonction conversion longitude en flottant
|
||
float conver_longitude(char * ch)
|
||
{
|
||
float lat_s=0,lat_f=0,x=0,lat_s_2=0;
|
||
|
||
float long_s=0,long_f=0,x=0,long_s_2=0;
|
||
int cpt=0,i=0,c=0,cpt_2=0;
|
||
while(ch[i]!= '.')
|
||
{
|
||
... | ... | |
c=decode_nombre(ch,3);
|
||
for(i=0;i<cpt;i++)
|
||
{
|
||
lat_s=10*lat_s+decode_int(ch[i]);
|
||
long_s=10*long_s+decode_int(ch[i]);
|
||
}
|
||
for(i=cpt+1;i<cpt_2;i++)
|
||
{
|
||
lat_s_2=lat_s_2*10+decode_int(ch[i]);
|
||
long_s_2=long_s_2*10+decode_int(ch[i]);
|
||
}
|
||
lat_s=lat_s+(lat_s_2/pow(10,cpt+1));
|
||
long_s=long_s+(long_s_2/pow(10,cpt-1));
|
||
|
||
lat_f= ((lat_s-c*pow(10,cpt-3))/60)+c;
|
||
return lat_f;
|
||
long_f= ((long_s-c*pow(10,cpt-3))/60)+c;
|
||
return long_f;
|
||
}
|
||
//fonction regroupant la conversion latitude et la conversion longitude
|
||
float latitude_longitude(char * ch)
|
||
... | ... | |
}
|
||
if(cpt==10)
|
||
{
|
||
conver_longitude(ch);
|
||
return conver_longitude(ch);
|
||
}
|
||
else
|
||
{
|
||
conver_latitude(ch);
|
||
return conver_latitude(ch);
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
int decode_trame(char * trame)
|
||
{
|
||
int cpt=66,i=0,j=0;
|
||
float a=0, b=0;
|
||
char lat[10],longi[9];
|
||
if (trame_cmp(trame,"GPGGA"))
|
||
int cpt=0,i=0,j=0,k=0;
|
||
float a, b;
|
||
char lat[10]={NULL},longi[11]={NULL};
|
||
if (trame_cmp(trame,"GPGGA")) // si la trame est GPGGA on affiche la valeur de la lagitude et de la longitude
|
||
{
|
||
/*while(trame[cpt]!='\0')
|
||
while(trame[cpt]!='\0')
|
||
{
|
||
cpt++;
|
||
}*/
|
||
}
|
||
for(i=cpt-49;i<=cpt-41;i++)
|
||
{
|
||
lat[j]=trame[i];
|
||
j++;
|
||
lat[j]=trame[i];
|
||
j++;
|
||
}
|
||
j=0;
|
||
for(i=cpt-37;i<=cpt-28;i++)
|
||
{
|
||
longi[j]=trame[i];
|
||
j++;
|
||
longi[k]=trame[i];
|
||
k++;
|
||
}
|
||
a=conver_latitude(lat);
|
||
b=conver_longitude(longi);
|
||
printf("latitude = %f",a);
|
||
printf("longitude = %f",b);
|
||
printf("\nlatitude = %f",a);
|
||
printf("\nlongitude = %f\n",b);
|
||
return 1;
|
||
}
|
||
|
||
}
|
||
float calcule_vitesse(float distance)
|
||
{
|
||
float v=0;
|
||
v=distance*3600;
|
||
printf("\nvitesse = %lf \n",v);
|
||
return v ;
|
||
|
||
}
|
||
|
||
|
||
//Ajouter vos tests unitaires dans cette fonction.
|
||
void tests_unitaires(void){
|
||
... | ... | |
printf ("Erreur Test unitaire latitude_longitude.\n");
|
||
exit(-1);
|
||
}
|
||
decode_trame("$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");
|
||
calcule_vitesse(323);
|
||
|
||
}
|
||
|
Formats disponibles : Unified diff
fonction decode_trame et calcul_vitesse terminé