Pi4j事件监听器未由GPIO状态更改触发

问题描述 投票:1回答:1

我有一个简单的Java程序,应该监听GPIO状态的变化。我正在使用一个按钮来更改GPIO的状态,并且从端子上可以看到它的工作原理:enter image description here

尽管如此,事件侦听器永远不会触发。这是代码:

public class GpioHandler
{
    private static final GpioController gpioController = GpioFactory.getInstance();
    public static ButtonsHandler buttons;

    public GpioHandler()
    {
        buttons = new ButtonsHandler(gpioController, RaspiPin.GPIO_05);
        buttons.listener();
    }
}
public class ButtonsHandler
{
    private static HashMap<String, GpioPinDigitalOutput> buttons = new HashMap<String, GpioPinDigitalOutput>();

    public ButtonsHandler(GpioController gpioController, Pin... pins)
    {
        for(int c = 0; c < pins.length; c++)
        {
            Integer index = c + 1;
            buttons.put(index.toString(), gpioController.provisionDigitalOutputPin(pins[c]));
        }
    }

    public void listener()
    {
        for(HashMap.Entry<String, GpioPinDigitalOutput> pin : buttons.entrySet())
        {
            pin.getValue().addListener(new GpioPinListenerDigital() {
                @Override
                public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event)
                {
                    System.out.println(" --> GPIO PIN STATE CHANGE: " + pin.getKey() + " = " + event.getState());
                }
            });
        }
    }
}

我正在使用RaspberryPi 4和Pi4j的最新版本(1.2)。有什么建议吗?

java raspberry-pi event-listener gpio pi4j
1个回答
0
投票

好吧,显然这只是我的愚蠢。错误是我使用的是类GpioPinDigitalOutput而不是GpioPinDigitalInput。我更改了它,还修改了此行

buttons.put(index.toString(), gpioController.provisionDigitalOutputPin(pins[c]));

进入

buttons.put(index.toString(), gpioController.provisionDigitalInputPin(pins[c], PinPullResistance.PULL_DOWN));

以防止值浮动。现在一切正常。

© www.soinside.com 2019 - 2024. All rights reserved.