因此,我正在用Java开发Phidget传感器项目。想法是将传感器的值发送到数据库。
在onSensorChanged方法内部,我有一个uploadToServer方法调用。问题在于,当使用快速数据速率并且我转动拨号盘或移动滑块时,onSensorChanged方法几乎立即被触发,从而导致转盘拨号每次触发10-20次上载uploadToServer方法。
我曾尝试将数据速率减慢到1000ms,但它仍会打印多个值,该值仅在移动之后,然后在数据速率长度之后显示。
interfacephid.setDataRate(0, 1000);
因此,例如,如果我从传感器值0开始,然后迅速将拨盘旋转至完整旋转。然后,我得到两个读数,一个在100区域附近,然后是最后的静止位置999。理想情况下,我宁愿只打印最终位置。
我不知道为什么我要读一读。数据速率为1000毫秒,因此从理论上讲,如果我快速移动滑块,则onSensorChanged方法仅应在1秒后触发,从而将1个值发送到服务器。
我有一种感觉,我可能不得不实施一项单独的工作,以减少数据速率无法完成的工作。
这是我的onSensorChanged方法,这里没什么异常:
public void sensorChanged(SensorChangeEvent arg0) {
System.out.println("Slider value is "+arg0.getValue());
uploadSensorValue("sliderValue",sensorValue);
}
控制台输出与此类似(通常更多):
Slider value is 878
Slider value is 721
Slider value is 513
Slider value is 328
任何想法将不胜感激。
最佳答案
您是否设置了sensorChangeTrigger值以及数据速率?这两个参数在某种程度上相互覆盖。如果您设置了更改触发器,则无论输入的数据速率如何(取决于您在代码中设置参数的顺序),每次输入变化那么多时,它将触发一个事件。这听起来像您正在发生的事情,您只应在代码中设置数据速率或更改触发器,而无需同时设置两者。