2017-11-01 4 views
1

나는 안드로이드 것들에 GPIO 값을 설정하고 얻으려고 노력하고 있습니다, 나는 라즈베리 파이 3을 사용하고 있으며 BCM26 (출력), BCM16 (입력)에 연결되어 있습니다.안드로이드 것들 - 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"); 

. . .

mMotorGpio.setActiveType(Gpio.ACTIVE_HIGH); 
: 전압 신호를 구성하지 않은 또한

mMotorGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW); 

예를 들어, (활성) 참으로 반환 될 :

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

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

       mMotorGpio.setValue(newVal); 

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

답변

1

는 출력으로 설정 핀을 읽으려고 보인다

Official Documentation (입력에서 읽음 섹션)에 설명 된대로 고전압을 활성화해야하는 경우.

따라서 두 개의 별도 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가 출력으로 구성 될 때 예측할 수없는 값을 반환합니다.

관련 문제