将serial1保存到字符串 - 需要帮助

时间:2014-11-14 17:54:03

标签: logging gps arduino

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

3个字符串名为

  • nmeaRMC
  • nmeaGGA
  • nmeaGSA

以下是我想从保存在字符串中的GPS数据中取出的信息。


$ GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,男,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

任何人都可以帮我吗?

!!终极GPS每秒发送RMC,GGA和GSA !!

1 个答案:

答案 0 :(得分:0)

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

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

简而言之,第一个电话应该是

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

token将指向第一个字段的以空字符结尾的字符串,即“$ GPGGA”。对于下一个电话,请使用

token = strtok(NULL, ",");

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

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

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