我正在使用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时间?
答案 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,并根据您的操作进行修改。