Java 如何控制外设的数据速率?

Java 如何控制外设的数据速率?,java,Java,我有一个IMU,它以100Hz的频率向我的计算机发送数据。IMU的数据速率无法更改,并且每当IMU连接到计算机时,都会发送数据。我想将数据速率更改为5Hz,所以我设置了一个计数器,当计数器达到某个值时,我处理最后发送的数据。我怀疑这种技术会导致一些延迟问题,不实用。有没有其他方法来处理类似的问题? 请参阅代码以供参考。 我首先启动计数器,然后调用函数configure来启动与IMU的通信。每当发送一个新值时,计数器将减少1,直到达到1,然后使用该值(在本例中,我只是将该值记录到控制台中) sti

我有一个IMU,它以100Hz的频率向我的计算机发送数据。IMU的数据速率无法更改,并且每当IMU连接到计算机时,都会发送数据。我想将数据速率更改为5Hz,所以我设置了一个计数器,当计数器达到某个值时,我处理最后发送的数据。我怀疑这种技术会导致一些延迟问题,不实用。有没有其他方法来处理类似的问题? 请参阅代码以供参考。 我首先启动计数器,然后调用函数configure来启动与IMU的通信。每当发送一个新值时,计数器将减少1,直到达到1,然后使用该值(在本例中,我只是将该值记录到控制台中)

still=1;
slst=新的ArrayList();
ac=0;
ac1=0;
ac2=118;//1秒
ac3=118;
公共无效配置(RouteComponent源){
source.stream(新订户(){
@凌驾
公共无效应用(数据、对象…环境){
h=data.value(EulerAngles.class).heading();
r=data.value(EulerAngles.class.roll();
如果(ac>1){
ac--;
}
如果(ac1>1){
ac1--;
}
如果(ac==1&&ac1>1){
//ac2=3;
//如果(ac3==1){
仍然=1;
Log.i(String.valueOf(still));
stext.setText(“静止”);
Log.i(“Heading=,String.valueOf(h));
vtext.setText(String.valueOf(h));
ac=0;
//   }
//如果(ac3>1){
//ac3--;
//  }
}
如果(ac1==1){
//如果(ac2>1){
//ac2--;
// }
//如果(ac2==1){
//ac3=20;
//如果(ac2==1){
仍然=0;//活动
Log.i(String.valueOf(still));
stext.setText(“活动”);
ac1=0;
ac=0;
如果(ac4==1){
ac4=4//
}
}

谢谢你的帮助。

这似乎不必要的复杂。只抛出20帧中的19帧并捕获20帧不是更简单吗?我怎么能不使用计数器就抛出20帧中的19帧呢?你不能。但你只需要一个计数器来跟踪它。数数20帧,抓取一帧,然后将计数器重置为零。冲洗,重新设置泥炭。
still = 1;
slst = new ArrayList<>();
ac = 0;
ac1 = 0;
ac2 = 118; // 1 sec
ac3 =118;

public void configure(RouteComponent source) {
                    source.stream(new Subscriber() {
                        @Override
                        public void apply(Data data, Object... env) {
                          h = data.value(EulerAngles.class).heading();
                          r = data.value(EulerAngles.class).roll();
                            if (ac>1){
                                ac--;
                            }
                            if(ac1>1){
                                ac1--;
                            }

                            if (ac==1 && ac1>1){
                               // ac2=3;
                              //  if(ac3==1) {
                                    still = 1;
                                    Log.i(String.valueOf(still));
                                stext.setText("Still");
                                    Log.i("Heading = ", String.valueOf(h));
                                vtext.setText(String.valueOf(h));
                                    ac = 0;
                             //   }
                               // if(ac3>1){
                               //     ac3--;
                              //  }
                            }
                            if(ac1==1) {
                                //if(ac2>1){
                                //   ac2--;
                                // }
                                // if(ac2==1){
                                // ac3=20;
                                //   if(ac2==1) {
                                still = 0; // active
                                Log.i( String.valueOf(still));
                                stext.setText("Active");
                                ac1 = 0;
                                ac = 0;
                                if (ac4 == 1) {
                                    ac4 = 4; //
                                }
                            }