实现一个门铃按钮

门铃没有什么可说的,没有一个按钮,游客会在门口大声宣布他们的存在。

在本课中,您将学习将按钮连接到GPIO输入,使用外设I / O进行初始化,并监听该输入上的状态更改。

连接按钮

使用面包板,将按钮开关连接到电路板上相应的GPIO端口。将按钮连接到您的主板上:

  1. 将按钮的一侧连接到所选的GPIO输入引脚,另一侧接地。
  2. 将相同的GPIO输入引脚通过上拉电阻连接到+ 3.3V。

对于本课程,每个电路板上都假设有以下GPIO引脚:

Board Input Signal
Raspberry Pi BCM21

""

捕获按钮按事件

按钮外围驱动程序处理监听GPIO状态更改的低级逻辑。它也使输入端口默认为去抖动,以避免单个按钮按下多个触发事件。要将按钮驱动程序添加到您的应用程序:

  1. 通过将应用程序项目连接到可用的GPIO端口,为应用程序项目添加一个按钮外设。
  2. 将按钮驱动程序依赖关系添加到应用级 build.gradle 文件中:

    dependencies {
        ...
    
        compile 'com.google.android.things.contrib:driver-button:0.2'
    }
    
  3. 使用连接的GPIO端口名称初始化一个按钮,以及指示按钮物理按下的适当逻辑状态。

  4. 当用户按下或释放按钮时,附加 OnButtonEventListener 接收回调:

    public class DoorbellActivity extends Activity {
    
        /**
         * The GPIO pin to activate for button presses.
         */
        private final String BUTTON_GPIO_PIN = ...;
    
        /**
         * Driver for the doorbell button;
         */
        private Button mButton;
    
        /**
         * Initializes button driver, which will report physical button presses.
         */
        private void initializeDoorbellButton() {
            try {
                mButton = new Button(BUTTON_GPIO_PIN,
                        Button.LogicState.PRESSED_WHEN_LOW);
                mButton.setOnButtonEventListener(mButtonCallback);
            } catch (IOException e) {
                Log.e(TAG, "button driver error", e);
            }
        }
    
        /**
         * Callback for button events.
         */
        private Button.OnButtonEventListener mButtonCallback =
                new Button.OnButtonEventListener() {
            @Override
            public void onButtonEvent(Button button, boolean pressed) {
                if (pressed) {
                    // Doorbell rang!
                    Log.d(TAG, "button pressed");
                }
            }
        };
    }
    
  5. 管理连接

    您应该根据应用程序组件的生命周期管理外围连接。在创建或启动父活动时初始化按钮组件,并在活动停止或销毁时关闭连接。

    public class DoorbellActivity extends Activity {
        ...
    
        private Button mButton;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ...
    
            initializeDoorbellButton();
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            ...
    
            if (mButton != null) {
                try {
                    mButton.close();
                } catch (IOException e) {
                    Log.e(TAG, "button driver error", e);
                }
            }
        }
    }
    

    results matching ""

      No results matching ""