GPS - 速度不会更新 - EM408& Arduino Mega& GSM

时间:2014-07-08 04:15:15

标签: c gps arduino gsm i2c

我正在开发一种能够获取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秒的差异。

虽然我已经为(i = 0; i <= 4; i ++)&#34;添加了&#34; getGPSData()强制它在GSM通过互联网发送之前至少获得4倍的位置,现在工作得更好但仍然得到错误的值,或者有时会长时间冻结到相同的速度。

我已经尝试添加第二块电路板,并将两者都用于与I2C进行通信&#34;双核心&#34;,其中一块电路板将每秒从GPS获取数据,另一块电路板将从每15秒发送一次数据,但有时连接I2C时GSM会冻结:(。

有没有人知道怎么做?

1 个答案:

答案 0 :(得分:0)

添加“for(i=0;i<=4;i++)”循环是不好的,就像你尝试过一样,而且还要添加重复的设备 - 远离解决方案。相反,您应该从getGPSdata()取消绑定sendData(),换句话说,将它们的调用分成不同的任务。

我可以想象这是一个简单的循环调度,提供了该库,而不是那里的完整RTOS,不是吗?然而,将它们放入不同的任务,循环或其他任何事情。可能你需要安排一个缓冲区来收集GPS数据并从缓冲区发出不同的循环。

希望它有所帮助。