ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android-GPIO值始终更改

2019-10-25 04:36:56  阅读:176  来源: 互联网

标签:android-things raspberry-pi android


第一次使用android东西时,我尝试检测到按钮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 sample,但按钮触发从未触发.

解决方法:

您连接到GPIO的导线当前处于悬空状态,这意味着它未连接到任何其他信号.当信号在高值和低值之间自由浮动时,这会生成一系列事件.在这种情况下,按钮驱动程序不会触发任何事件的原因是因为我们具有内置的防反跳保护功能,可以忽略在如此短的时间内发生的事件.

您需要将输入线移动到开关的另一侧.我绘制了正确导线放置的快速Fritzing图:

Correct Wiring

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

Switch Internals

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

标签:android-things,raspberry-pi,android
来源: https://codeday.me/bug/20191025/1925863.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有