Pi4j 事件侦听器未由 GPIO 状态更改触发
Pi4j Event Listener not triggered by GPIO status change
我有一个简单的 Java 程序,它应该监听 GPIO 状态的变化。
我正在使用一个按钮来更改 GPIO 的状态,从终端我可以看到它有效:
尽管如此,事件侦听器永远不会被触发。
这是代码:
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)。
有什么建议吗?
好吧,看来是我傻了。
错误是我使用的是 class GpioPinDigitalOutput 而不是 GpioPinDigitalInput。
我改了,也修改了这一行
buttons.put(index.toString(), gpioController.provisionDigitalOutputPin(pins[c]));
进入
buttons.put(index.toString(), gpioController.provisionDigitalInputPin(pins[c], PinPullResistance.PULL_DOWN));
防止值浮动。
现在一切正常。
我有一个简单的 Java 程序,它应该监听 GPIO 状态的变化。
我正在使用一个按钮来更改 GPIO 的状态,从终端我可以看到它有效:
尽管如此,事件侦听器永远不会被触发。
这是代码:
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)。
有什么建议吗?
好吧,看来是我傻了。
错误是我使用的是 class GpioPinDigitalOutput 而不是 GpioPinDigitalInput。
我改了,也修改了这一行
buttons.put(index.toString(), gpioController.provisionDigitalOutputPin(pins[c]));
进入
buttons.put(index.toString(), gpioController.provisionDigitalInputPin(pins[c], PinPullResistance.PULL_DOWN));
防止值浮动。
现在一切正常。