【问题标题】:Save serial1 to string - help needed将 serial1 保存到字符串 - 需要帮助
【发布时间】:2014-11-15 03:29:26
【问题描述】:

我正在使用 Adafruit Ultimate GPS 记录 gps 数据,但想学习如何将数据保存为 3 个字符串,然后取出我想要的数据。

三个字符串被命名

  • nmeaRMC
  • nmeaGGA
  • nmeaGSA

这是我想从保存到字符串中的 GPS 数据中提取的信息。


$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47。

在 GGA 中我想要:

  • GPS 定位质量 = 1
  • 卫星数 = 08

$GPGSA,A,3,04,05,,09,12,,,24,,,,,2.5,1.3,2.1*39

在 GSA 中我想要:

  • 3D 固定值 = 3
  • 垂直稀释精度 (VDOP) = 2.1

$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A

在 RMC 中我想要:

  • 时间 = 123519
  • GPS 状态 = A
  • 纬度 = 4807.038,N
  • 经度 = 01131.000,E
  • 日期 = 230394

谁能帮我解决这个问题?

!! Ultimate GPS 每秒发送一次 RMC、GGA 和 GSA !!

【问题讨论】:

    标签: logging gps arduino


    【解决方案1】:

    您需要使用strtok() 来解析这些“逗号分隔的字符串”,使用分隔符,

    StackOverflow 上已经有很多类似的问题,网上也有很多例子。

    简而言之,第一次调用应该是

    char *token = strtok(nmeaGGA, ",");
    

    token 将指向第一个字段的空终止字符串,即“$GPGGA”。对于下一次调用,请使用

    token = strtok(NULL, ",");
    

    注意 NULL 值。该函数将在同一字符串中查找后续字段。通过计数跳过您不想要的字段。要将字符串转换为数字,请使用atoi()atof()

    对于 RMC 中的纬度和经度,为 4807.038 和 N 使用两个单独的标记。

    由于逗号的数量是固定的并且对于每种类型的字符串都是已知的,因此您也可以使用 sscanf() 作为替代来解析字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      • 2014-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多