Révision 402
Ajouté par Clement ROCHE il y a presque 3 ans
branch/ROCHE/sp4a12/main.c | ||
---|---|---|
"$GPVTG,99.4,T,,M,0.4,N,0.7,K*57",
|
||
"$GPZDA,141914.00,01,02,2006,00,00*69",
|
||
0};
|
||
typedef struct {
|
||
typedef struct { //Definition de la structure position
|
||
float latitude;
|
||
float longitude;
|
||
} Position ;
|
||
... | ... | |
int i=0,res=0,b,p;
|
||
for (i=0;i<n;i++) {
|
||
p=1;
|
||
for(b=0;b<n-i-1;b++){
|
||
for(b=0;b<n-i-1;b++){ //joue le role d'une puissance
|
||
p=p*10;
|
||
}
|
||
res = res + decode_int(ch[i])*p;
|
||
... | ... | |
n++;
|
||
} while (c[n]!='.');
|
||
|
||
if (n==4) {
|
||
degre = (c[0]-48)*10+(c[1]-48);
|
||
min = (c[2]-48)*10+(c[3]-48);
|
||
} else {
|
||
if (n==4) { //Travaille une latitude
|
||
degre = (c[0]-48)*10+(c[1]-48); //partie degr? d'une lat
|
||
min = (c[2]-48)*10+(c[3]-48); //partie min d'une lat
|
||
} else { //Travaille une longitude
|
||
degre = (c[0]-48)*100+(c[1]-48)*10+(c[2]-48);
|
||
min = (c[3]-48)*10+(c[4]-48);
|
||
}
|
||
... | ... | |
n++;
|
||
do {
|
||
p=1;
|
||
for (b=0;b<i;b++) {
|
||
for (b=0;b<i;b++) { //permet de faire des 10^-i
|
||
p=p*0.1;
|
||
}
|
||
secondes= secondes + (c[n]-48)*p;
|
||
... | ... | |
n++;
|
||
} while (c[n]!='\0');
|
||
|
||
res = degre + (min+secondes)/60;
|
||
res = degre + (min+secondes)/60; //retourne la valeur final
|
||
|
||
return res;
|
||
|
||
... | ... | |
int n=17,cpt=0; //n=17 car le codage d'une latitude commence ? l'indice 17 ds la trame
|
||
char lat[10],lon[10];
|
||
do {
|
||
lat[cpt]=trame[n];
|
||
lat[cpt]=trame[n]; //reconstitue un char avec les caract?re d'une latitude
|
||
n++;
|
||
cpt++;
|
||
} while (trame[n]!=',');
|
||
cpt=0; //cpt qui balaye le char lat/long
|
||
n=29; //codage d'une longitude commence ? l'indice 29 ds la trame
|
||
do {
|
||
do { //reconstitue un char avec les caract?re d'une longitude
|
||
lon[cpt]=trame[n];
|
||
n++;
|
||
cpt++;
|
||
} while (trame[n]!=',');
|
||
} while (trame[n]!=','); //arret ? la virgule qui signifie un changement de donn?e dans la trame
|
||
|
||
(*P).latitude = decode_lat_long(lat); //ne pas mettre de chiffre cela na aps de sens
|
||
(*P).latitude = decode_lat_long(lat); //stockage des valeurs obtenue dans le pointeur de structure poisition P
|
||
(*P).longitude = decode_lat_long(lon);
|
||
}
|
||
|
||
float calcule_distance(Position p_1,Position p_2) {
|
||
float x,y,res;
|
||
x=(p_2.longitude - p_1.longitude)*cos((p_2.latitude + p_1.latitude) / 2);
|
||
x=(p_2.longitude - p_1.longitude)*cos((p_2.latitude + p_1.latitude) / 2); //Pythagore
|
||
y=(p_2.latitude - p_1.latitude);
|
||
res = (sqrt((x*x)+(y*y)))*1.852*60;
|
||
res = (sqrt((x*x)+(y*y)))*1.852*60; //*1.852*60 pour passer en km
|
||
return res;
|
||
}
|
||
|
||
float calcule_vitesse(Position p_1,Position p_2) {
|
||
float res;
|
||
res = calcule_distance(p_1,p_2) * 3600; //*3600 pour passer en km/h
|
||
res = calcule_distance(p_1,p_2) * 3600; //*3600 pour passer en km/h, ici la periode est de 1s donc v=d en km/s
|
||
return res;
|
||
}
|
||
|
Formats disponibles : Unified diff
MAJ commentaire