Projet

Général

Profil

« Précédent | Suivant » 

Révision 671

Ajouté par jcguifodjo il y a presque 4 ans

Creation de la table zones

Voir les différences:

main.c
#include <strings.h>
#include "trame.h"
#include "math.h"
#define k 111120
#define k 111.120 //Constante a utiliser pour calculer la distance en utilisant la m?thode de Pythagore
#define N 200
#define rads 0.01745329252
#define t 1/6
#define h 1/60
#define rads 0.01745329252 //rads=pie/180 puisque le langage C utilise les angles en radians
//Trames de tests ? modifier si n?cessaire.
char * trames[]= {"$GPGSV,3,2,10,15,03,077,,18,04,041,42,19,85,271,,20,08,214,*7C",
......
"$GPGSA,A,3,,03,,22,14,,01,,18,,,,3.9,3.4,1.9*39",
"$GPVTG,99.4,T,,M,0.4,N,0.7,K*57",
"$GPZDA,141914.00,01,02,2006,00,00*69",
0};
typedef struct {
float latitude;
float longitude;
} Position ;
//Comparaison des trames pour savoir si la trame est du bon type
int trame_cmp(char* trame,char* type)
{
......
return d;
}
//Conversion d'un caract?re en decimal
int decode_int(char c)
{
......
}
return d;
}
//Renvoi la valeur decimal des n premiers caract?res entr?e en param?tre
int decode_nombre(char *c, int n)
{
......
}
return valeur;
}
//Conversion de la latitude et longitude en degree floatant
float conversion(char *c)
{
int i=0;
float deg_lat,deg_long;
float test;
while(c[i]!='\0'){
i++;
......
}
else{
d=0;
printf("\nNe peut decode cette trame");
}
printf("\nTrames: %s", trame);
......
printf("\nLongitude: %2.7f", (*p).longitude);
}
//Test pour d?coder la latitude et la longitude des trames "$GPGGA" en degr? d?cimaux
// calcule la racine carr?e en se basant sur l'algorithme de Heron
float racine_carree(float nb){
float a,fa,e;
e=1;
a=1;
while(e>0.0001){
fa=((nb/a)+a)/2;
if(fa>a)
{
e=fa-a;
}
else
e=a-fa;
a=fa;
}
return a;
}
//Fonction qui calcule la distance entre deux positions
float calcul_distance(Position p1,Position p2){
float x,a,y,z,distance,b;
......
b=(p1.latitude+p2.latitude)/2;
x=a*cos(b*rads);
y=p2.latitude-p1.latitude;
z=sqrt((x*x)+(y*y));
z=racine_carree((x*x)+(y*y));
distance=k*z;
return distance;
}
//Fonction qui calcule la vitesse du vehicule par seconde
/*float calcule_vitesse(Position p1, Position p2){
float calcule_vitesse(Position p1, Position p2){
float distance,vitesse;
distance=calcul_distance(Position p1, Position p2);
distance=calcul_distance( p1, p2);
vitesse=3.6*distance;
return vitesse;*
return vitesse;
}*/
}
typedef struct {
Position rpos;
float vitmax;
} Zone ;
Zone zones[] = {
{{44.7887762, -3.012}, 50}, /* Descripteur de la premi?re zone */
{{44.7891220, -3,013}, 70},
};
//Calcul de la distance ? la zone dangereuse la plus proche
int distance_a_la_proche_zone(Position p, Zone r[],int nb_zones, float *d){
int i;
float dist;
if(nb_zones!=0){
(*d)=calcul_distance(p,r[0].rpos);
for(i=1;i<nb_zones;i++){
dist=calcul_distance(p,r[i].rpos);
if(dist<(*d)){
(*d)=dist;
}
}
}
return i;
}
//Fonction ? modifier !!!!!
void traitement(char * trame)
{
Position p;
int d;
static int cpt=0 ;
cpt++ ;
if (trame_cmp(trame,"GPGGA")==1)

Formats disponibles : Unified diff