我正在开发一种能够获取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会冻结:(。
有没有人知道怎么做?
答案 0 :(得分:0)
添加“for(i=0;i<=4;i++)
”循环是不好的,就像你尝试过一样,而且还要添加重复的设备 - 远离解决方案。相反,您应该从getGPSdata()
取消绑定sendData()
,换句话说,将它们的调用分成不同的任务。
我可以想象这是一个简单的循环调度,提供了该库,而不是那里的完整RTOS,不是吗?然而,将它们放入不同的任务,循环或其他任何事情。可能你需要安排一个缓冲区来收集GPS数据并从缓冲区发出不同的循环。
希望它有所帮助。