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.
我试图在 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.