Estoy usando dos funciones para la conversión DMS a largo y largo. cuando estoy usando esas dos funciones, se visualiza correctamente lat o lon en mi UART. cuando primero imprima la latitud en UART, muestre el valor DMS correcto. luego, cuando imprima la segunda, su dosnt muestra el valor correcto (0000000) .
void lat_DMS(char *lat_data, char *lat_return)
{
char temp[3],temp1[3];
float res1=atof(lat_data);
float flo=res1/100;
int ilong=flo;
latdeg[0]=ilong;
sprintf(temp,"%03d",ilong);
strncat(lat_return,temp,strlen(temp));
float lati=flo-ilong;//subtract the values
float res12=lati*60;//multiply the value differ value with 60
int minutes=res12;
latdeg[1]=minutes;
sprintf(temp,"%02d",minutes);
strncat(lat_return,temp,strlen(temp));
float isec=res12-minutes;
int lasec=isec*60;
latdeg[2]=lasec;
sprintf(temp,"%02d",lasec);
strncat(lat_return,temp,strlen(temp));
}
void lon_DMS(char *lon_data, char *lon_return)
{
char temp1[3];
float res2=atof(lon_data);
float lonflo=res2/100;
int inlong=lonflo;
londeg[0]=inlong;
sprintf(temp1,"%03d",inlong);
strncat(lon_return,temp1,strlen(temp1));
float longi=lonflo-inlong;//subtract the values
float lonres=longi*60;//multiply the value differe value with 60
int lonminutes=lonres;
londeg[1]=lonminutes;
sprintf(temp1,"%02d",lonminutes);
strncat(lon_return,temp1,strlen(temp1));
float lonsec=lonres-lonminutes;
int longisec=lonsec*60;
londeg[2]=longisec;
sprintf(temp1,"%02d",longisec);
strncat(lon_return,temp1,strlen(temp1));
}
Estoy almacenando valor en matrices para transmitir 4 bytes + 4 bytes de latitud y longitud (Deg, Min, sec, dire cada 1 byte)
en la función principal
uartwrite("LAT:");
lat_DMS(latPtr,&Dlat);
uartwrite(&Dlat);
uartwrite("\r\n");
memset(Dlat,'void lat_DMS(char *lat_data, char *lat_return)
{
char temp[3],temp1[3];
float res1=atof(lat_data);
float flo=res1/100;
int ilong=flo;
latdeg[0]=ilong;
sprintf(temp,"%03d",ilong);
strncat(lat_return,temp,strlen(temp));
float lati=flo-ilong;//subtract the values
float res12=lati*60;//multiply the value differ value with 60
int minutes=res12;
latdeg[1]=minutes;
sprintf(temp,"%02d",minutes);
strncat(lat_return,temp,strlen(temp));
float isec=res12-minutes;
int lasec=isec*60;
latdeg[2]=lasec;
sprintf(temp,"%02d",lasec);
strncat(lat_return,temp,strlen(temp));
}
void lon_DMS(char *lon_data, char *lon_return)
{
char temp1[3];
float res2=atof(lon_data);
float lonflo=res2/100;
int inlong=lonflo;
londeg[0]=inlong;
sprintf(temp1,"%03d",inlong);
strncat(lon_return,temp1,strlen(temp1));
float longi=lonflo-inlong;//subtract the values
float lonres=longi*60;//multiply the value differe value with 60
int lonminutes=lonres;
londeg[1]=lonminutes;
sprintf(temp1,"%02d",lonminutes);
strncat(lon_return,temp1,strlen(temp1));
float lonsec=lonres-lonminutes;
int longisec=lonsec*60;
londeg[2]=longisec;
sprintf(temp1,"%02d",longisec);
strncat(lon_return,temp1,strlen(temp1));
}
',strlen(Dlat));
uartwrite("LON:");
lon_DMS(lonPtr,&Dlon);
uartwrite(&Dlon);
uartwrite("\r\n");
memset(Dlon,' uartwrite("LAT:");
lat_DMS(latPtr,&Dlat);
uartwrite(&Dlat);
uartwrite("\r\n");
memset(Dlat,'%pre%',strlen(Dlat));
uartwrite("LON:");
lon_DMS(lonPtr,&Dlon);
uartwrite(&Dlon);
uartwrite("\r\n");
memset(Dlon,'%pre%',strlen(Dlon));
',strlen(Dlon));
si la pila está llena? Estoy confundido. Estoy cargando mi programa en mi controlador, no se está cargando correctamente y cuando lo cargo por segunda vez en micro cont, el programa previamente cargado se está ejecutando. He escrito uartwrite mientras que el bucle más de 2 veces no muestra el tiempo y el valor de lon