Raspberry PI,Java和Pi4J控制GPIO无法获得当前的PinState

时间:2015-11-16 23:38:44

标签: java gpio

我正在研究一个小程序,它应该检查一个探测GPIO Pin的当前状态,而不是切换ist。为此我使用java和PI4J。当我的程序启动时,LED被关闭。但是只要我将其作为变量,它就会自动将状态设置为HIGH。有谁知道如何避免这种情况?我的代码到目前为止:

final GpioController gpio = GpioFactory.getInstance();
GpioPinDigitalOutput led =gpio.provisionDigitalMultipurposePin(RaspiPin.GPIO_07,PinMode.DIGITAL_OUTPUT);


            PinState ledStatus = led.getState();
            if (ledStatus.isHigh())
            {
                led.setShutdownOptions(true, PinState.LOW);
                System.out.println("Set shutdownOption LOW");
            }
            else
            {
                led.setShutdownOptions(true, PinState.HIGH);
                System.out.println("Set shutdownOption HIGH");
            } 

         if(ledStatus.isHigh())
        {
            System.out.println("LEDS aus...");
        }
        else 
        {
            System.out.println("LEDS an...");
        }
        led.toggle();

这项工作相当不错。但正如我所说,在我启动程序之前... LED已关闭!我一到这条线: GpioPinDigitalOutput led = gpio.provisionDigitalMultipurposePin(RaspiPin.GPIO_07,PinMode.DIGITAL_OUTPUT); LED亮起!我需要弄清楚在应用程序运行之前获取状态的方法,更改它然后在切换LED时退出我的程序。

感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

尝试使用provisionDigitalMultipurposePin方法设置第一模式INPUT以读取状态,然后切换到OUTPUT模式以更改引脚状态。

GpioController gpio = GpioFactory.getInstance();
GpioPinDigitalMultipurpose led = gpio.provisionDigitalMultipurposePin(RaspiPin.GPIO_07, PinMode.DIGITAL_INPUT);

// read state

led.setMode(PinMode.DIGITAL_OUTPUT);

// write state