- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用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。
不幸的是,我有几个可能导致这种不良行为的来源。
我对 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/
我使用的 GPS 输出多个 NMEA 语句,可用于定位数据。 (GPGGA 和 GPRMC)。有什么理由我应该使用一个而不是另一个吗?我应该检查它们并比较数据吗?我可以随便挑一个使用吗? 在这一点上,
我正在编写一个程序,它以 GPRMC NMEA 语句的形式接收数据并按照 GTFS-realtime 的指定输出。 GTFS-realtime 需要一个“轴承”值,并将其描述为: Bearing, i
我想使用TinyGPS++在 Arduino 上解析 NMEA 数据并在 OLED 显示屏上显示信息。但是,NMEA 数据将通过 USB 接收,而不是使用软件串行和 TX/RX 引脚。 我按照 Tin
我正在从 lat long 项目中添加简单的 NMEA,Lat long 工作得很好,但是当转移到 nmea 时它给我错误。 如果有人能帮助我,我将不胜感激。 protected LocationMa
我使用套接字(http://read.pudn.com/downloads116/sourcecode/unix_linux/493018/NtripLinuxClient.c__.htm)在 C 中
我想在 HTTP POST 正文中向我的服务器发送一堆 NMEA 语句,但我对 Content-Type 应该是什么感到困惑。 我没有找到 NMEA 的标准 IANA MIME 类型(来自通用 tex
我已经发布了类似的帖子。我确实在理论上得到了答案,但我真的需要有人帮助我。 所以我正在使用这个 EXAMPLE用于测试我的 GPS。我想要做的是如何获得标准的十进制值,如纬度和经度的 56,32241
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
任何帮助显示 NMEA 句子的人 $GPRMC .....我正在使用以下代码: public class SampleNMEA extends Activity implements Location
我正在尝试使用 Arduino uno 和以下代码解析传入的 GPGGA NMEA GPS 字符串。我想做的是我只使用 GPGGA NMEA 字符串来获取纬度、经度和高度的值。在我下面的代码中,我进行
我正在寻找生产级的开源 Delphi NMEA 解析器。 能满足关键任务要求就可以了(开玩笑!我相信用Win32系统是达不到的)。 到目前为止,我已经使用基本 Windows API (NMEA 01
我有兴趣了解是否有任何方法可以使用 Nmea String 提高速度?以前没听说过这个,请赐教。谢谢:)我正在做一个android,我已经计算了所有的距离和时间。 最佳答案 NMEA 是一种基于文本的
从 GPS 日志中提取以下内容: $GPGGA,153500.009,5137.2603,N,00244.8715,W,1,10,0.8,50.6,M,51.4,M,,0000*71 $GPRMC,1
我写了一些 C/C++ 代码,包括 this NMEA library解析来自 gps 设备的数据。 #include #include #include #include #include
我在处理 NMEA 数据 (gpzda) 时遇到了问题。问题解释如下。 NMEA 数据:$GPZDA,011856.00,17,03,2018,,*61 我的解析代码。 char hour[2] =
我很难理解如何在 map 上看到某个位置 NMEA 语句给我的位置: 敌例:给定句子 $GPRMC,225446,A,4916.45,N,12311.12,W,000.5,054.7,191194,0
我正在使用 GPS 系统。我想从 GPS 设备读取数据。我正在使用 NMEA 协议(protocol)。我正在从设备获取数据,但它有点像编码的 ASCII 字符串,但我没有得到。那么有没有什么方法可以
我进行了大量位置感知计算,通常会结合 GPS。我有自己的小型简单 NMEA 解析器,它不执行任何特殊操作 - 只是将 GPS 特定句子转换为可用的数字、标志等。 但是,GPSD 和 Gypsy 等项目
我的 GPS 记录器偶尔会在日志文件的末尾留下“未完成”的行。我认为他们只是在最后,但我想检查所有行以防万一。 一个完整的句子示例如下: $GPRMC,005727.000,A,3751.9418,S
我的 UART 配置为 4800 波特率,我无法使用下面粘贴的 UART 代码接收 NMEA 语句(GPS 评估板)。单独的GPS+终端和UART+终端工作正常。但是GPS+UART,我永远无法接收任
我是一名优秀的程序员,十分优秀!