提取数据后未显示 GPRMC 字符串 - C
GPRMC string is not showing after extracting the data - C
我正在使用 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 字符串。这是我的超级终端的屏幕截图 window
这是我的代码:
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] = '[=11=]';
}
}
}
}
}
else
{
printf("Bad GPS data");
}
}
}
}
uart_str(gpsdata);
uart_str("\r\n");
}
既然你知道有它,就添加它怎么样?
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] = '[=10=]';
}
}
}
你应该做的第一件事就是想出一个更好的方法来编写这个程序,这可能是
int done;
done = 0;
while (done == 0)
{
const char *string;
int valid;
valid = 1;
string = "$GPRMC";
while ((*string != '[=10=]') && ((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] = '[=10=]';
}
uart_str(gpsdata);
uart_str("\r\n");
}
}
我正在使用 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 字符串。这是我的超级终端的屏幕截图 window
这是我的代码:
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] = '[=11=]';
}
}
}
}
}
else
{
printf("Bad GPS data");
}
}
}
}
uart_str(gpsdata);
uart_str("\r\n");
}
既然你知道有它,就添加它怎么样?
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] = '[=10=]';
}
}
}
你应该做的第一件事就是想出一个更好的方法来编写这个程序,这可能是
int done;
done = 0;
while (done == 0)
{
const char *string;
int valid;
valid = 1;
string = "$GPRMC";
while ((*string != '[=10=]') && ((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] = '[=10=]';
}
uart_str(gpsdata);
uart_str("\r\n");
}
}