我正在使用GPS模块处理PIC。我的GPS模块发送NMEA数据
$GPRMC,000036.799,V,,,,,0.00,0.00,060180,,,N*40
$GPVTG,0.00,T,,M,0.00,N,0.00,K,N*32
$GPGGA,000036.799,,,,,0,0,,,M,,M,,*4A
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,1,1,00*79
$GPGLL,,,,,000036.799,V,N*78
$GPTXT,01,01,02,ANTSTATUS=OPEN*2B
这里我的目的是从上面提取“GPRMC”数据字符串。我想我已经成功地把它从“GPRMC”中删除了,但问题是被提取的数据字符串没有 GPRMC 字符串。这是我的超级终端窗口的截图
这是我的代码:
while (1)
{
//memset(gpsdata,0,sizeof(gpsdata));
char c = uartrec2();
if (c == '$')
{
char c1 = uartrec2();
if (c1 == 'G')
{
char c2 = uartrec2();
if (c2 == 'P')
{
char c3 = uartrec2();
if (c3 == 'R')
{
char c4 = uartrec2();
if (c4 == 'M')
{
char c5 = uartrec2();
if (c5 == 'C')
{
for (i = 0 ; i < 100 ; i++)
{
gpsdata[i] = uartrec2();
/* while (gpsdata[i] == '\r' || gpsdata[i] == '\n')
{
break;
} */
if (gpsdata[i] == '\r' ) // Checking for '\r'
{
gpsdata[i] = '\0';
}
}
}
}
}
else
{
printf("Bad GPS data");
}
}
}
}
uart_str(gpsdata);
uart_str("\r\n");
}
答案 0 :(得分:1)
你应该做的第一件事是尝试找出一个更好的方法来编写这个程序,这可能是
int done;
done = 0;
while (done == 0)
{
const char *string;
int valid;
valid = 1;
string = "$GPRMC";
while ((*string != '\0') && ((valid = (uartec2() == *string)) != 0))
string++;
if (valid != 0)
{
for (int i = 0 ; i < 100 ; ++i)
{
gpsdata[i] = uartec2();
if (gpsdata[i] != '\r')
continue;
gpsdata[i] = '\0';
}
uart_str(gpsdata);
uart_str("\r\n");
}
}
答案 1 :(得分:0)
如果只是添加它,你知道它有吗?
if (c5 == 'C')
{
gpsdata[0] = '$';
gpsdata[1] = 'G';
gpsdata[2] = 'P';
gpsdata[3] = 'R';
gpsdata[4] = 'M';
gpsdata[5] = 'C';
for (i = 6 ; i < 100 ; i++)
{
gpsdata[i] = uartrec2();
/* while (gpsdata[i] == '\r' || gpsdata[i] == '\n')
{
break;
} */
if (gpsdata[i] == '\r' ) // Checking for '\r'
{
gpsdata[i] = '\0';
}
}
}