hola, estoy usando en ccs el código que implementó migsantiago , según las coordenadas que uso en google maps hay 96 metros, cuando compilo en el micro la función me retorna 68.58m, tambien lo probé con distancias mas grandes de 3.8km segun google maps y el micro devuelve 2.7km.
pongo el código por si ven algo raro
#INCLUDE <24FJ64GA002.h>
#INCLUDE <MATH.H>
#FUSES ICSP1, NOWDT, NODEBUG, NOPROTECT, NOJTAG, FRC, NOWINDIS, NOPR, IOL1WAY, OSCIO, NOCKSFSM, NOIESO
#USE DELAY(clock=8000000)
#PIN_SELECT U2TX=pin_b2
#PIN_SELECT U2RX=pin_b3
#PIN_SELECT U1TX=pin_b5
#PIN_SELECT U1RX=pin_b4
#use rs232(baud=9600, Xmit=pin_b5, rcv=pin_b4, STREAM=UART1) //PC
#use rs232(baud=9600, Xmit=pin_B2, rcv=pin_b3, STREAM=UART2) //GPS
#define SIM_EARTH_RADIUS (6372797.560856)
FLOAT LAT1=3.427318;
FLOAT LON1=-76.499700 ;
FLOAT LAT2= 3.427912;
FLOAT LON2=-76.499072;
float Degree_to_Radian(float x);
void SIM_GPS_Distance(float lat1, float lon1, float lat2, float lon2);
void main()
{
while(true)
{
SIM_GPS_Distance(lat1,lon1,lat2,lon2);
}
}
float Degree_to_Radian(float x)
{
return (x * 0.017453292);
}
void SIM_GPS_Distance(float lat1, float lon1, float lat2, float lon2)
{
float delta_lat;
float delta_lon;
float a;
float c;
float dist;
lat1 = Degree_to_Radian(lat1);
lat2 = Degree_to_Radian(lat2);
delta_lat = Degree_to_Radian(lat2 - lat1);
delta_lon = Degree_to_Radian(lon2 - lon1);
a = sin(delta_lat / 2.0) * sin(delta_lat / 2.0) +
cos(lat1) * cos(lat2) *
sin(delta_lon / 2.0) * sin(delta_lon / 2.0);
c = 2.0 * atan2(sqrt(a), sqrt(1.0 - a));
dist = SIM_EARTH_RADIUS * c;
FPRINTF(UART1,"%f",dist);
while(1){}
}