提取数据后,不显示GPRMC字符串 - C.

时间:2015-10-01 01:56:22

标签: c string gps

我正在使用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 字符串。这是我的超级终端窗口的截图

enter image description here

这是我的代码:

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");
}

2 个答案:

答案 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';
        }
    }
}