Основное - написание парсера для нмеа. В большинстве приемников месаги автоматом выплевываются раз в секунду. Остается их ловить, разбирать и складывать. Я пишу в яре, поэтому не стал особо выдумывать и использовал библиотечные функции. Типа:
Код
switch(sscanf((char const*)&gps.rx_buf[0], "$GPRMC,%lx.%hx,%c,%hx.%hx,%c,%lx.%hx,%c,%hx.%hx,%hx.%hx,%lx,%*c",
&rmc->utc_time, &rmc->sss, &rmc->status, &rmc->latitude_high, &rmc->latitude_low, &rmc->ns_indicator,
&rmc->longitude_high, &rmc->longitude_low, &rmc->ew_indicator, &rmc->speed_high, &rmc->speed_low,
&rmc->cource_high, &rmc->cource_low, &rmc->data))
{
case 14:
GPS_Stack_Init();
return GPS_RX_MES;
case (14-3):
if(sscanf((char const*)&gps.rx_buf[0], "$GPRMC,%*lx.%*hx,%*c,%*hx.%*hx,%*c,%*lx.%*hx,%*c,%*hx.%*hx,,%lx,%*c",
&rmc->data) == 1)
{
rmc->cource_high = 0xFFFF;
rmc->cource_low = 0xFF;
GPS_Stack_Init();
return GPS_RX_MES;
}
GPS_Stack_Init();
return GPS_NOT_RX_MES;
default:
GPS_Stack_Init();
return GPS_NOT_RX_MES;
}
Вопрос у меня к делавшим. Как вы боретесь с флуктуациями? Когда объект стоит на месте, все равно скорость часто бывает отлична от нуля.