4

このプログラムでは、 GPIO ピンを読み取ることができます。しかし、単一のイベントでハードウェア ボタン (ボタンに接続された GPIO ピン) を押すと、状態変化のバーストが発生し、アクション イベントのバーストが発生します。これを排除するために、特定の期間同時に発生する GPIO 状態変化を排除するにはどうすればよいですか?バースト。

final GpioController gpio = GpioFactory.getInstance();
GpioPinDigitalInput myButton = null;
try {
    myButton = gpio.provisionDigitalInputPin(RaspiPin.GPIO_02,PinPullResistance.PULL_DOWN);
} catch(GpioPinExistsException e) {
}

try {
    myButton.addListener(new GpioPinListenerDigital() {
        @Override
        public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) {
            if(event.getState().toString().equalsIgnoreCase("HIGH") || event.getState().toString().equalsIgnoreCase("LOW")) {
                System.out.println("Pressed");
            }
        }
    });
} catch(NullPointerException e2) {
}
4

2 に答える 2

1

API は機能しているように見えます。たとえば、ボタンを押すと、読み取りピンに電流が流れ始め、ボタンを離すまでピンは HIGH イベントを取得し続けます。あなたがしなければならないことは、状態を持ち、プレスとリリースを制御することです。

try {
    myButton.addListener(new GpioPinListenerDigital() {

        private boolean pressed = false;
        private boolean released = false;

        @Override
        public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) {
                String state = event.getState().toString();
                if (state.equalsIgnoreCase("HIGH")) {
                       pressed = true;
                       released = !pressed;
                } else {
                       released = true;
                       pressed = !released;
                }

                // Do what you want with it.
            }
        });
    } catch(NullPointerException e2) {

    }
于 2015-01-06T02:38:06.817 に答える