我制作了一个从 GPS 获取数据并发送的 Android 应用程序。它由 aPC 接收,并通过 USB 发送到 AVR 套件,该套件需要将经度、纬度格式转换为 NMEA 格式并返回到 USB。消息格式为:
纬度='23.353434333' 和经度='45.34333345'
我需要使用 ATmega32 将上述消息转换为 NMEA GPS 格式,但由于我不知道 AVR 编程,有人可以建议我如何做到这一点或上面的代码吗?
您没有 AVR 编程经验与实施 NMEA 无关。然而,了解 C 会有所帮助;)
您给定的表示latitude='23.353434333' 和 longitude='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 协议需要额外阅读一些关于实现细节的信息。
首先将 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"