【发布时间】:2014-07-08 04:15:15
【问题描述】:
我正在开发一个系统,它将获取 GPS 信号并通过 GSM 发送它,其中包含来自一些数字传感器的位置、速度和温度信息。
目前我正在使用 GPS EM408、Arduino mega 和 GSM 板(官方的)。
问题是 GPS(由 TinyGPSPlus 库提供)长时间给我相同的速度,或者有时给我 0km/h。
草图是这样的:
loop()
{
getGPSData() - ~ 1 sec to execute and take one data from the GPS.
getSensors() - ~ 1 sec to execute and take one data from the digital sensors.
sendData() - ~ 6 n 10 secs to send the data through the internet.
}
整个过程大约需要 10 ~ 15 秒才能完成。
如果我删除 sendData() 并且系统每秒开始获取 GPS 信息,则速度值可以正常工作,但如果我每 12 秒从 GPS 获取数据(由于 GSM 延迟),则速度不起作用正如预期的那样。
我知道问题是因为 TinyGPSPlus 库计算两点之间的速度,而 getGPSData() 每次循环只获取一个信息,而下一个点有 15 秒的差异。
虽然我在 getGPSData() 中添加了“for(i=0;i
我尝试添加第二块板,并将两者都与 I2C 通信,将其变成“双核”,其中一块板将每秒从 GPS 获取数据,另一块板将每 15 秒发送一次数据,但连接 I2C 时 GSM 有时会冻结:(。
有人知道怎么做吗?
【问题讨论】:
-
速度应该相对于位置的时间戳有效。如果那是 11 秒前,那么它仍然应该显示 11 秒前的速度。速度不应该通过位置变化来计算,它应该直接从GPS属性“速度(地面)”中获取
-
@AlexWien 谢谢亚历克斯。
-
我检查了 GPS 和 Arduino 之间的串行通信,因此我发现问题是因为通信中间存在间隙。我的代码有一个 WHILE() 来在数据来自串行时继续从串行获取信息,但有时两者之间的连接有一个小的停止(间隙)并且它正在关闭 WHILE()。我添加了另一个 WHILE() 以继续检查序列至少 2 秒,它解决了问题。谢谢