注:代码不包含变量定义,仅供参考
//字符串转double函数
double esp8266str_to_double(char *buf)
{
double return_value = 0;
double dat;
int integer = 1;
char *str = buf;
int8 negative_flag = 1;
int i;
if('-' == *str)
{
negative_flag = -1;
str++;
}
while(*str != '\0')
{
dat = *str - '0';
if('.' == *str)
{
integer = 0;
i = 1;
}
else
{
if( integer == 1 )
{
return_value = return_value * 10 + dat;
}
else
{
return_value = return_value + dat / (10 * i);
i = i * 10 ;
}
}
str ++;
}
return return_value*negative_flag;
}
//串口中断数据缓存
void uart3_interrupt_handler()
{
uint8 Res;
uart3_interrupt_flag = true;
uart_getchar(UART_3, &Res);
if(Res == '@')
{
atcnt=!atcnt;
if(atcnt==1)
{
ucRxCnt3 =0;
}
}
ESP_BUF[ucRxCnt3++] = Res;
if(ESP_BUF[0] == '@' )
{
if(Res == '\n')
{
memset(Save_Data1.GPS_Buffer, 0, GPS_Buffer_Length1);
memcpy(Save_Data1.GPS_Buffer, ESP_BUF, ucRxCnt3);
Save_Data1.isGetData = true;
ucRxCnt3 = 0;
memset(ESP_BUF, 0, 200);
}
}
}
//数据解析
void parseEspBuffer()
{
char *subString;
char *subStringNext;
char i = 0;
for(i = 0 ; i <= 3 ; i++)
{
if (i == 0)
{
subString = strstr(Save_Data1.GPS_Buffer, "@");
}
else
{
subString++;
if(i==1)
{
if ((subStringNext = strstr(subString, "@")) != NULL)
{
memcpy(Save_Data1.longitude, subString, subStringNext - subString);
}
}
if(i==2)
{
if ((subStringNext = strstr(subString, "#")) != NULL)
{
}
}
if(i==3)
{
if ((subStringNext = strstr(subString, "#")) != NULL)
{
memcpy(Save_Data1.latitude, subString, subStringNext - subString);
}
}
subString = subStringNext;
Save_Data1.isParseData = true;
}
}
}
//字符串转double
void transform1()
{
a_latitude1=esp8266str_to_double(Save_Data1.latitude);
b_longitude1=esp8266str_to_double(Save_Data1.longitude);
}
//调用
if(uart3_interrupt_flag)
{
uart3_interrupt_flag=0;
parseEspBuffer();
transform1();
}