[英]Android Things - Gpio.getValue() always returning true
我試圖在 Android Things 上設置和獲取 gpio 值,我正在使用 raspberry pi 3 並在 BCM26(輸出)、BCM16(輸入)上建立連接。
我也嘗試過更改引腳並使用 DMM 檢查它們,無論我做什么,我都無法將輸出設置為高電平。 甚至 getValue gpio 也返回 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);
如果您希望高電壓如官方文檔(從輸入讀取部分)中所述那樣活躍。
因此,您將需要 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();
}
您無法可靠地讀取配置為輸出的引腳的狀態值。 來自getValue()的GPIO 參考文檔:
獲取 GPIO 引腳的當前值(僅適用於配置為輸入的 GPIO 引腳)。 當 GPIO 配置為輸出時,返回一個不可預測的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.