使用java的PI中的GPIO pin侦听器导致突发操作事件

使用java的PI中的GPIO pin侦听器导致突发操作事件,java,raspberry-pi,gpio,pi4j,Java,Raspberry Pi,Gpio,Pi4j,在这个程序中,我可以读取GPIO引脚。但按下单个事件的硬件按钮(与按钮相连的GPIO引脚)会导致突发状态更改,并导致突发操作事件。。因此,我如何消除在特定时间段内同时发生的GPIO状态更改,以消除此突发 final GpioController gpio = GpioFactory.getInstance(); GpioPinDigitalInput myButton = null; try { myButton = gpio.provisionDigitalInputPin(Raspi

在这个程序中,我可以读取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) {
}

似乎API正在按预期工作,例如,当您按下按钮时,电流将开始流向读取引脚,作为回报,引脚将保持高电平,直到您释放按钮。你必须做的是有一个状态并控制新闻发布

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) {

    }

我刚刚意识到可以在GPIO上设置去盎司持续时间:

myButton.setDebounce(1000); // 1000 ms
我将尝试一下并报告我的发现

完整的示例和解释如下:

编辑

debounce(1000)
调用本身似乎可以工作。我获得状态更改的频率不超过
ms
中的值


然而,我最初的问题是,一旦我打开联系人,我的状态就会从
LOW
变为
HIGH
,反之亦然(突发)一直没有得到解决。它们现在只每隔1000毫秒出现一次。

我尝试了您的示例代码,但仍然收到大量的脉冲。只要电路闭合,就没有。但一旦我打开,我就会一直看到状态变化(低/高)。我有一个带有最新Raspbian的Pi3,使用提供的(旧的)Oracle java 1.8.0_65和pi4j 1.0。