Android GPIO值总是变化的

Android GPIO值总是变化的,android,raspberry-pi,android-things,Android,Raspberry Pi,Android Things,第一次使用android things时,我尝试检测一个点击按钮的GPIO,但值总是变化: 2018-07-09 15:53:00.123 1539-1539/com.poci/home活动:GPIO已更改,按钮正确 2018-07-09 15:53:00.134 1539-1539/com.poci/home活动:GPIO更改,按钮错误 2018-07-09 15:53:00.143 1539-1539/com.poci/home活动:GPIO更改,按钮正确 2018-07-09 15:53:

第一次使用android things时,我尝试检测一个点击按钮的GPIO,但值总是变化:

2018-07-09 15:53:00.123 1539-1539/com.poci/home活动:GPIO已更改,按钮正确
2018-07-09 15:53:00.134 1539-1539/com.poci/home活动:GPIO更改,按钮错误
2018-07-09 15:53:00.143 1539-1539/com.poci/home活动:GPIO更改,按钮正确
2018-07-09 15:53:00.154 1539-1539/com.poci/home活动:GPIO更改,按钮错误
2018-07-09 15:53:00.163 1539-1539/com.poci/home活动:GPIO更改,按钮正确
2018-07-09 15:53:00.174 1539-1539/com.poci/home活动:GPIO更改,按钮错误
2018-07-09 15:53:00.183 1539-1539/com.poci/home活动:GPIO已更改,按钮正确
2018-07-09 15:53:00.194 1539-1539/com.poci/home活动:GPIO更改,按钮错误
2018-07-09 15:53:00.203 1539-1539/com.poci/home活动:GPIO更改,按钮正确
2018-07-09 15:53:00.214 1539-1539/com.poci/home活动:GPIO更改,按钮错误
2018-07-09 15:53:00.223 1539-1539/com.poci/HomeActivity:GPIO更改,按钮正确
2018-07-09 15:53:00.234 1539-1539/com.poci/home活动:GPIO更改,按钮错误

这是我的覆盆子和面包板

还有我的密码

val TAG = "HomeActivity"
val BUTTON_PIN_NAME = "BCM21"

lateinit var mButtonGpio: Gpio

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    var pioManager = PeripheralManager.getInstance()
    Log.d(TAG, "Available GPIO : " + pioManager.gpioList)

    try{
        mButtonGpio = pioManager.openGpio(BUTTON_PIN_NAME)

        mButtonGpio.setDirection(Gpio.DIRECTION_IN)
        mButtonGpio.setEdgeTriggerType(Gpio.EDGE_BOTH)
        mButtonGpio.setActiveType(Gpio.ACTIVE_HIGH)

        mButtonGpio.registerGpioCallback(mCallback)
    }catch (e: IOException){
        Log.w(TAG, "Error opening GPIO", e)
    }
}

private val mCallback = GpioCallback { gpio ->
    try {
        Log.i(TAG, "GPIO changed, button " + gpio.value)
    } catch (e: IOException) {
        Log.w(TAG, "Error reading GPIO")
    }

    // Return true to keep callback active.
    true
}

我试着用另一个按钮,用更少或更多的电阻,但每次都有相同的结果。也尝试了,但从未触发按钮点击。

您连接到GPIO的导线当前处于浮动状态,这意味着它未连接到任何其他信号。当信号在高值和低值之间自由浮动时,这就是生成事件转换的原因。在这种情况下,我们的按钮驱动程序不会触发任何事件的原因是因为我们有内置的去抖动保护,可以忽略在如此短的时间跨度内发生的事件

您需要将输入线移到开关的另一侧。我画了一张正确布线的快速烧结图:

那为什么你的设置不起作用呢?这是因为在内部,这些按钮开关必须分离内部未连接的触点组。请参见下图

因此,试验板一侧的连接没有内部连接到另一侧的连接