第5节 按钮开关

对于硬件的控制,我们常用硬件开关来控制Arduino开发板上其他外接硬件的通断逻辑。比如,一盏LED灯,硬件上最好有个开关,按一下开关,就让LED灯亮,再按一下开关,就让LED灯关闭。

开关的外形有多种式样,四根引脚、三根引脚。不论是三引脚还是四引脚,原理都是相同的。如果选择四引脚开关,开发者就得自己搭建一个简单的电路;三引脚的按钮开关是对四引脚开关的集成封装,简化了外围电路的设计,很适合对硬件缺乏深入认识的软件开发者。

这里我们选用使用最方便的三引脚按钮开关。我们跟我学Arduino开发提供的按钮开关,就是这样的三引脚开关。

5.1 硬件连接

三引脚按钮开关的引脚对应如下,

含义引脚位置连接开发板引脚
控制S<–>D10
VCC电源<–>5V
接地GND<–>GND

在实际的使用当中,按钮开关经常连接到扩展板上。例如这里将按钮开关连接到10组扩展口上,

含义引脚位置连接扩展板引脚
控制S<–>10组S
VCC电源<–>10组V
接地GND<–>10组G

5.2 控制代码

首先我们初始化引脚,按钮使用的是D10,就要初始化D10为输入引脚,

int BUTTON_PIN = 10;

void setup() {
    //D10是作为输入使用的引脚
    pinMode(BUTTON_PIN, INPUT);
    Serial.begin(9600);
}

每按一次按钮,都会触发按下松开两个响应,也就是说,按钮按下后会自动弹起,不会保持被按下的状态,

  1. 当按下开关按钮的时候,S引脚会变成LOW电平;
  2. 当松开开关按钮的时候,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 查看结果

把以上代码部署到设备上,打开串口调试窗口,按下并松开开关,可以看到类似如下输出信息,


/*******************************************************************/

本系列课程使用到的Arduino开发板、扩展板以及其他相关的传感器,各位可以根据我们文章中介绍的硬件在淘宝网选购。
您也可以在我们的网店跟我学Arduino编程中购买,这些相关硬件都由我们为您把关购买,为大家节省选择的精力与时间。同时也感谢大家对我们这些码农的支持。

最后再次感谢各位读者对安豆的支持,谢谢:)

/*******************************************************************/

更多推荐