gpt4 book ai didi

c++ - 从序列中解析 NMEA 句子

转载 作者:行者123 更新时间:2023-12-03 12:50:05 28 4
gpt4 key购买 nike

我想使用TinyGPS++在 Arduino 上解析 NMEA 数据并在 OLED 显示屏上显示信息。但是,NMEA 数据将通过 USB 接收,而不是使用软件串行和 TX/RX 引脚。

我按照 TinyGPS++ 的示例进行操作,但遇到了两个问题:

1)当我通过串行监视器(Windows、Arduino 1.6.9)发送一个 NMEA 句子时,Arduino 仅接收到前 64 个字符。我怎样才能克服这个限制?我通过删除几位小数来帮助自己,但这不是首选方法。

2)在 TinyGPS++ BasicExample 中,只读存储器中定义了示例 NMEA 字符串:

// A sample NMEA stream.
const char *gpsStream =
"$GPRMC,045103.0,A,3014.0,N,09748.0,W,36.88,65.02,030913,,,A*7C\r\n"
"$GPGGA,045104.0,3014.0,N,09749.0,W,1,09,1.2,211.6,M,-22.5,M,,*62\r\n"
"$GPRMC,045200.0,A,3014.0,N,09748.0,W,36.88,65.02,030913,,,A*77\r\n"
"$GPGGA,045201.0,3014.0,N,09749.0,W,1,09,1.2,211.6,M,-22.5,M,,*6C\r\n"
"$GPRMC,045251.0,A,3014.0,N,09748.0,W,36.88,65.02,030913,,,A*7D\r\n"
"$GPGGA,045252.0,3014.0,N,09749.0,W,1,09,1.2,211.6,M,-22.5,M,,*6F\r\n";

并由

解析
while (*gpsStream) {
Serial.print(*gpsStream);
gps.encode(*gpsStream++);
}

我通过以下方式收到 NMEA(不幸的是只有一行):

if (Serial.available()) {
while (Serial.available() > 0) {
if(index < 80)
{
inChar = Serial.read();
inData[index] = inChar;
index++;
inData[index] = '\0';
}
}
}

并尝试通过以下方式解析它:

index = 0;
while (index < 80) {
gps.encode(inData[index]);
Serial.print(inData[index]);
index++;
}

但这并不能按预期工作。检查位置 isValid() 是否始终返回不为 true。

不幸的是,我有几个可能导致这种不良行为的来源。

  1. 句子太短(不太可能)
  2. 通过串行读取数据的方式不正确。
  3. 我只提交一行。
  4. 还有别的事。

我对 NMEA 和串行数据通信都没有那么丰富的经验,而且我对 Arduino/C 的经验也很少。您能给我指出如何解决这个(这些)问题的方向吗?

最佳答案

基本上,您不需要积累 NMEA 字符。您只需在收到它们后将它们输入 GPS 库即可。您不提供整个循环,但那里也很常见出现问题。

在与几个 GPS 库及其示例进行斗争之后,我最终写了 NeoGPS 。它比所有其他库更快、更小,它验证校验和,并且示例结构正确。与其他库不同,NeoGPS 不会将 GPS 值存储为浮点值,因此它能够保留 GPS 设备的全部精度。

如果您想尝试,请务必遵循安装说明。 NMEA.ino 示例将为您发送的每批 GPS 语句发出一行信息(CSV 格式),以默认的 RMC 语句结尾。请务必将其修改为使用 Serial 对象而不是 gps_port,或者简单地以这种方式定义它:

  #define gps_port Serial

它还会显示已解析的字符数、已收到多少个好句子以及有多少个句子有校验和错误。如果您没有正确生成校验和,这可能有助于调试。 This site也很有用。

这些 CSV 行将通过 USB 端口发送回(发送至 PC),但您可以轻松更改它以将特定字段发送至 OLED(请参阅 NMEAloc.ino)。

虽然可能在 PC 上开发一些东西,然后将其移植到 Arduino 等嵌入式环境,但您必须小心 (1) 线性程序结构和 (2) 忽略资源限制(程序大小、MCU 速度和 RAM)。 Arduino 环境存在许多怪癖,通常会使将“草图”移植到 PC 或从 PC 移植“草图”变得令人沮丧。 :P

关于c++ - 从序列中解析 NMEA 句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40203339/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com