用于将GPS坐标转换为NMEA格式的AVR代码

时间:2014-04-11 01:05:50

标签: c++ c gps avr nmea

我制作了一个Android应用程序,它从GPS获取数据并发送它。它由aPC接收,并通过USB发送到AVR套件,后者需要将经度,纬度格式转换为NMEA格式并将其返回USB。消息格式为:

  

纬度= '23 .353434333'和经度= '45 .34333345'

我需要使用ATmega32转换为NMEA GPS格式的上述消息,但由于我不知道AVR编程,有人可以建议我怎么做或上面的代码?

2 个答案:

答案 0 :(得分:1)

您没有使用AVR编程的经验与实现NMEA无关。然而,知道C会有所帮助;)

您的给定表示纬度= '23 .353434333'和经度= '45 .34333345'被称为十进制度(您的示例缺少N / S和E / W指示)

我假设您知道NMEA是协议规范,而不仅仅是坐标格式。 NMEA标准在数据集中使用以下坐标表示法:

XXYY.ZZZZ

这可以直接用度分秒秒格式表示,如下所示:

XX°YY'(0.ZZZZ * 60)“

因此,两者之间的转换是微不足道的,以及从度分秒十进制度的转换:

十进制度=度+分/ 60 +秒/ 3600

因此,从本质上讲,您只需反向执行给定的转换,即可获得NMEA坐标格式。

NMEA数据集如下所示:

$ GPRMC,162614,A,的 5230.5900,N,01322.3900,E 下,10.0,90.0,131006,1.2,E,A * 13

我用粗体突出显示了坐标信息。实现转换并不是特别的,而实现NMEA协议需要对实现细节进行一些额外的阅读。

答案 1 :(得分:-1)

将NMEA十进制小数转换为度/分钟/秒  第一。将十进制小数转换为十进制:  5144.3855(ddmm.mmmm)= 51 44.3855 = 51 + 44.3855 / 60 = 51.7397583度

然后将小数转换为度,分钟秒:  51积分+ .7397583 * 60 = 44.385498 = 44分钟  .385498 = 23.1秒  结果:51 44'23.1“