【问题标题】:GPS - Speed doesn't update as should - EM408 & Arduino Mega & GSMGPS - 速度没有按预期更新 - EM408 & Arduino Mega & GSM
【发布时间】: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 秒,它解决了问题。谢谢

标签: c gps arduino gsm i2c


【解决方案1】:

像您尝试的那样添加“for(i=0;i<=4;i++)”循环并添加重复设备是不好的 - 到目前为止还没有解决方案。相反,您应该将 getGPSdata()sendData() 解除绑定,换句话说,将它们的调用分离到不同的任务中。

我可以想象这是该库提供的简单循环调度,而不是其中的完整 RTOS,不是吗?不过,将它们放入不同的任务、循环或其他内容中。可能您需要安排一个缓冲区来收集 GPS 数据,并将其从不同循环的缓冲区中发送出去。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    相关资源
    最近更新 更多