使用Arduino的GPS数据

时间:2016-05-20 07:06:46

标签: arduino gps

我正在使用CRIUS Neo-6 GPS模块,我想每隔10秒通过GSM模块从GPS发送数据。我看到的这段代码看起来像这样:

if (Serial1.available() > 0)
if (gps.encode(Serial1.read()))
{

  double hour = gps.time.hour();
  double minute = gps.time.minute();
  double second = gps.time.second();

    Serial.println("Sending SMS:");
    GPRS.print("AT+CMGF=1\r");
    delay(100);
    GPRS.println("AT+CMGS= \"00*********\"");
    delay(100);
    GPRS.print("HOUR=");
    GPRS.print(hour);
    GPRS.print(" MINUTE=");
    GPRS.println(minute);
    GPRS.print(" SECOND=");
    GPRS.println(second);
    delay(100);
    GPRS.print((char)26);
    delay(100);
    GPRS.println();
    Serial.println("Text sent.");


  Serial.println();
 delay(10000);
}

Serial1是用于与GPS模块通信的SoftwareSerial实例。 现在这每10秒发送一次短信,但数据搞砸了,就像时间不刷新一样。我得到类似的东西:

小时= 6.00分钟= 37.00秒= 54.00

小时= 6.00分钟= 37.00秒= 54.00

小时= 6.00分钟= 37.00秒= 54.00

小时= 6.00分钟= 38.00秒= 15.00

依此类推..它总是两三个相同的SMS-es然后下一个30秒的差距。我应该更改为始终发送最新的GPS时间?

1 个答案:

答案 0 :(得分:0)

1)告诉我们你正在使用的Arduino。看起来它可能是一个巨型。

2)发布整个草图并确定您正在使用的库。看起来它可能是TinyGPS ++。

5)不要使用 double 。它与Arduino上的 float 相同。但也不要使用 float 。只需使用 int unsigned char

现在。示例程序是否有效?这将证实你有良好的卫星接收效果。

接下来,你知道你的GPS每秒发送几种不同类型的消息吗?并非所有邮件都包含时间字段(请参阅此table of messages vs. fields)。

最后,这些线路会带来很多麻烦:

delay(100);
  ...
delay(100);
  ...
delay(100);
  ...
delay(100);
  ...
delay(10000);[/code]

虽然草图在这些延迟时停止,但没有处理GPS字符。但是,等待只有一条消息被解析为" if(gps.encode",并且你发送另一条短信。唯一被解析的消息可能没有时间字段,所以你发送相同的消息时间。

您应该研究避免使用delay的方法。看看Arduino论坛上的一些帖子," Serial Input Basics"和"如何一次做几件事"在Useful Links

另外,我写了一个更好的GPS库,名为NeoGPS。它比TinyGPS ++小得多,速度也快。这些例子的结构也更好。 NMEAtimezone.ino最接近你正在做的事情。如果您想尝试,请务必遵循Installation说明。您应该按照以下顺序尝试几个程序:NMEA,NMEAdiagnostic和NMEAorder(如有必要)和NMEAfused。然后尝试NMEAtimezone,并根据您的操作进行修改。