第5节 按钮开关
对于硬件的控制,我们常用硬件开关来控制Arduino开发板上其他外接硬件的通断逻辑。比如,一盏LED灯,硬件上最好有个开关,按一下开关,就让LED灯亮,再按一下开关,就让LED灯关闭。
开关的外形有多种式样,四根引脚、三根引脚。不论是三引脚还是四引脚,原理都是相同的。如果选择四引脚开关,开发者就得自己搭建一个简单的电路;三引脚的按钮开关是对四引脚开关的集成封装,简化了外围电路的设计,很适合对硬件缺乏深入认识的软件开发者。
![](http://res.anddle.com/image/arduino/05.%E4%B8%89%E5%BC%95%E8%84%9ALED.png)
这里我们选用使用最方便的三引脚按钮开关。我们跟我学Arduino开发提供的按钮开关,就是这样的三引脚开关。
5.1 硬件连接
三引脚按钮开关的引脚对应如下,
![](http://res.anddle.com/image/arduino/05.%E4%B8%89%E5%BC%95%E8%84%9ALED%E8%AF%B4%E6%98%8E.png)
含义 | 引脚位置 | 连接 | 开发板引脚 |
---|---|---|---|
控制 | S | <–> | D10 |
VCC | 电源 | <–> | 5V |
接地 | GND | <–> | GND |
在实际的使用当中,按钮开关经常连接到扩展板上。例如这里将按钮开关连接到10组扩展口上,
含义 | 引脚位置 | 连接 | 扩展板引脚 |
---|---|---|---|
控制 | S | <–> | 10组S |
VCC | 电源 | <–> | 10组V |
接地 | GND | <–> | 10组G |
![](https://i-blog.csdnimg.cn/blog_migrate/a9bb51d7bdc7332a6506b8966f2baaf0.png)
5.2 控制代码
首先我们初始化引脚,按钮使用的是D10,就要初始化D10为输入引脚,
int BUTTON_PIN = 10;
void setup() {
//D10是作为输入使用的引脚
pinMode(BUTTON_PIN, INPUT);
Serial.begin(9600);
}
每按一次按钮,都会触发按下
和松开
两个响应,也就是说,按钮按下后会自动弹起,不会保持被按下的状态,
- 当按下开关按钮的时候,
S引脚
会变成LOW
电平; - 当松开开关按钮的时候,
S引脚
会变成HIGH
电平;
所以当出现了这两个变化的时候,才能判断按钮被按下并抬起了一次。
采用digitalRead()
读取按钮对应引脚的电平,判断它当前是否被按下,
//初始情况下,按钮是没有按下的,所以是HIGH电平
int oldButtonState = HIGH;
void loop() {
//读取开关引脚的电平,判断当前是否被按下
int buttonState = digitalRead(BUTTON_PIN);
//当前被按下(LOW),之前没有被按下(HIGH),
//说明使用者按下了按钮
if(buttonState == LOW && oldButtonState == HIGH)
{
Serial.println("button press down");
oldButtonState = buttonState;
}
//当前没有被按下(HIGH),之前被按下(LOW),
//说明使用者松开了按钮
if(buttonState == HIGH && oldButtonState == LOW)
{
Serial.println("button press up");
oldButtonState = buttonState;
}
}
5.3 查看结果
把以上代码部署到设备上,打开串口调试窗口,按下并松开开关,可以看到类似如下输出信息,
![](https://i-blog.csdnimg.cn/blog_migrate/d7f327a27e60017138e8e2a01d92431a.png)
/*******************************************************************/
本系列课程使用到的Arduino开发板、扩展板以及其他相关的传感器,各位可以根据我们文章中介绍的硬件在淘宝网选购。
您也可以在我们的网店跟我学Arduino编程中购买,这些相关硬件都由我们为您把关购买,为大家节省选择的精力与时间。同时也感谢大家对我们这些码农的支持。
最后再次感谢各位读者对安豆
的支持,谢谢:)
/*******************************************************************/