实现一个门铃按钮
门铃没有什么可说的,没有一个按钮,游客会在门口大声宣布他们的存在。
在本课中,您将学习将按钮连接到GPIO输入,使用外设I / O进行初始化,并监听该输入上的状态更改。
连接按钮
使用面包板,将按钮开关连接到电路板上相应的GPIO端口。将按钮连接到您的主板上:
- 将按钮的一侧连接到所选的GPIO输入引脚,另一侧接地。
- 将相同的GPIO输入引脚通过上拉电阻连接到+ 3.3V。
对于本课程,每个电路板上都假设有以下GPIO引脚:
Board | Input Signal |
---|---|
Raspberry Pi | BCM21 |
捕获按钮按事件
按钮外围驱动程序处理监听GPIO状态更改的低级逻辑。它也使输入端口默认为去抖动,以避免单个按钮按下多个触发事件。要将按钮驱动程序添加到您的应用程序:
将按钮驱动程序依赖关系添加到应用级 build.gradle
文件中:
dependencies {
...
compile 'com.google.android.things.contrib:driver-button:0.2'
}
使用连接的GPIO端口名称初始化一个按钮,以及指示按钮物理按下的适当逻辑状态。
当用户按下或释放按钮时,附加 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");
}
}
};
}
管理连接
您应该根据应用程序组件的生命周期管理外围连接。在创建或启动父活动时初始化按钮组件,并在活动停止或销毁时关闭连接。
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);
}
}
}
}