Projet

Général

Profil

« Précédent | Suivant » 

Révision 402

Ajouté par Clement ROCHE il y a presque 3 ans

MAJ commentaire

Voir les différences:

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