RxJava树莓派按钮推送识别

时间:2019-11-18 20:57:40

标签: java raspberry-pi observable rx-java pi4j

我打算使用RxJava和pi4j来识别Button事件。

我需要检测:

  • 单击一次:1次推拉1次
  • 双击:1次推,1次拉,1次推,1次拉
  • 长按:1按住10秒钟

我是Observable和RxJava的新手,我只能编写一个简单的测试来检测2次点击:

Observable<Boolean> source = Observable.create(emitter -> {
            emitter.onNext(true);
            emitter.onNext(false);
            emitter.onNext(true);
            emitter.onNext(false);
            Thread.sleep(300);

            emitter.onNext(false);
            Thread.sleep(300);
            emitter.onNext(false);
            Thread.sleep(2000);

            emitter.onNext(true);
            emitter.onNext(false);
            Thread.sleep(550);
            emitter.onNext(false);

            Thread.sleep(2000);
            emitter.onNext(false);
            emitter.onNext(false);

            emitter.onComplete();
        });

        source
            .filter((value) -> value == false)
            .timeout(500, TimeUnit.MILLISECONDS)
            .onErrorReturn((error) -> { return true; })
            .filter((value) -> value == false)
            .buffer(2)
            .filter((items) -> items.size() == 2)
            .subscribe(
                (list) -> { System.out.println("double tap? " + list); },
                (error) -> { System.out.println("error " + error); },
                () -> { System.out.println("complete"); }
            );

现在的问题是,当超时超过500毫秒时,抛出一个异常,导致观察者完成,但是我的目标是永不停止监听来自该来源的事件!

有人可以帮助我吗? 那单击和长按事件又如何呢? 我怎么认出来?

谢谢。

0 个答案:

没有答案