Android 事物 - Gpio.getValue() 总是返回 true

Android Things - Gpio.getValue() always returning true

我试图在 Android 事物上设置和获取 gpio 值,我正在使用 raspberry pi 3 并在 BCM26(输出)、BCM16(输入)上建立连接。

我也尝试过更换引脚并使用 DMM 检查它们,无论我做什么我都无法将输出设置为高电平。甚至 getValue gpio 也 return false.

mMotorGpio = service.openGpio(MOTOR_PIN_NAME);
            mMotorGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);

            Log.i(TAG, "Output GPIO set");

。 . .

 try {
                boolean newVal = !mMotorGpio.getValue();

                Log.i(TAG,"setting port value as " + newVal);

                mMotorGpio.setValue(newVal);

            }catch (IOException e){
                e.printStackTrace();
            }

似乎您正在尝试从配置为输出的引脚读取:

mMotorGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);

而且您没有将电压信号配置为返回真(活动),例如:

mMotorGpio.setActiveType(Gpio.ACTIVE_HIGH);

如果您希望高电压如 Official Documentation(从输入读取部分)中所述那样处于活动状态。

因此,您需要 2 个单独的 Gpio 对象(一个用于输入,另一个用于输出)来执行您想要的操作。像这样:

private static final String MOTOR_PIN_OUT_NAME = "BCM26";
private static final String MOTOR_PIN_IN_NAME = "BCM16";

private Gpio mMotorGpioIn;
private Gpio mMotorGpioOut;

...

mMotorGpioIn = service.openGpio(MOTOR_PIN_IN_NAME);
mMotorGpioIn.setDirection(Gpio.DIRECTION_IN);
mMotorGpioIn.setActiveType(Gpio.ACTIVE_HIGH);

mMotorGpioOut = service.openGpio(MOTOR_PIN_OUT_NAME);
mMotorGpioOut.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
mMotorGpioOut.setActiveType(Gpio.ACTIVE_HIGH);

...

try {
    boolean newVal = !mMotorGpioIn.getValue();

    Log.i(TAG,"setting port value as " + newVal);

    mMotorGpioOut.setValue(newVal);

} catch (IOException e){
    e.printStackTrace();
}

您无法可靠地读取配置为输出的引脚的状态值。来自 GPIO reference docs for getValue():

Get the current value of the GPIO pin (for GPIO pins configured as input only). Returns an unpredictable value when the GPIO is configured as output.