GPIO值总是发生变化

3
第一次使用Android Things, 我尝试检测GPIO的按钮击打,但是值一直在变化:

2018-07-09 15:53:00.123 1539-1539/com.pocdetector I/HomeActivity: GPIO changed, button true
  2018-07-09 15:53:00.134 1539-1539/com.pocdetector I/HomeActivity: GPIO changed, button false
  2018-07-09 15:53:00.143 1539-1539/com.pocdetector I/HomeActivity: GPIO changed, button true
  2018-07-09 15:53:00.154 1539-1539/com.pocdetector I/HomeActivity: GPIO changed, button false
  2018-07-09 15:53:00.163 1539-1539/com.pocdetector I/HomeActivity: GPIO changed, button true
  2018-07-09 15:53:00.174 1539-1539/com.pocdetector I/HomeActivity: GPIO changed, button false
  2018-07-09 15:53:00.183 1539-1539/com.pocdetector I/HomeActivity: GPIO changed, button true
  2018-07-09 15:53:00.194 1539-1539/com.pocdetector I/HomeActivity: GPIO changed, button false
  2018-07-09 15:53:00.203 1539-1539/com.pocdetector I/HomeActivity: GPIO changed, button true
  2018-07-09 15:53:00.214 1539-1539/com.pocdetector I/HomeActivity: GPIO changed, button false
  2018-07-09 15:53:00.223 1539-1539/com.pocdetector I/HomeActivity: GPIO changed, button true
  2018-07-09 15:53:00.234 1539-1539/com.pocdetector I/HomeActivity: GPIO changed, button false

这里是我的树莓派和面包板: breadboard 以下是我的代码:
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
}

我尝试使用其他按钮,使用更少或更多的电阻器,但每次结果都相同。也尝试过Android Things示例,但按下按钮时从未触发。

1个回答

4
您所连接到GPIO的电线目前处于悬空状态,这意味着它未连接到任何其他信号。这就是你看到的信号在高低值之间自由浮动所产生的一系列事件。我们按钮驱动程序在这种情况下不触发任何事件的原因是因为我们内置了去抖保护来忽略在这么短的时间内发生的事件。
您需要将输入电线移到开关的另一侧。我画了一个快速的正确接线的Fritzing图示:

Correct Wiring

所以,为什么你的设置没有起作用呢?这是因为这些按钮开关内部有两组不相互连接的接点。请参见以下图表。

Switch Internals

因此,面包板一侧的连接与另一侧的连接没有内部连接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接