簡體   English   中英

Android Things - Gpio.getValue() 總是返回 true

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM