2017-11-01 15 views
1

私はAndroidのものでgpio値を設定して取得しようとしていますが、私はラズベリーpi 3を使用していて、BCM26(出力)、BCM16(入力)Android物 - Gpio.getValue()は常にtrueを返す

また、出力を高く設定できない場合でも、ピンを変更して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(); 
      } 

答えて

1

あなたは出力用に設定ピンを読み取ろうと思え:

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(); 
} 
0

あなたは確実に出力として設定ピンの状態値を読み取ることができません。 GPIO reference docs for getValue()

GPIOピンの現在の値を取得します(入力としてのみ設定されたGPIOピンの場合)。 GPIOが出力として設定されている場合、予測不可能な値を返します。

関連する問題