按键

作者:hardihuang   hardihuang   

实验材料 #

  • Uno R3开发板
  • 配套USB数据线
  • 面包板及配套连接线
  • 1个LED灯
  • 1个220Ω电阻
  • 1个轻触按键

实验中我们用到了轻触按键,常见的有2脚按键和4脚按键,其内部结构如下图所示:

按键内部结构

当按下按键时,按键两端接通,当放开时,两端再次断开。

实验步骤 #

  1. 根据原理图搭建电路 直插式LED灯负极接开发板GND,正极接220Ω限流电阻,电阻另一端接开发板数字9引脚。按键一端接开发板GND,另一端接数字引脚2。 实验原理图如下图所示:
  1. 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

/*
 * Digital_Button
 * 通过按键控制LED灯亮灭
 */

int buttonPin = 2;     // 按键的管脚定义
int ledPin =  9;      // LED灯管脚定义

void setup() {
  pinMode(ledPin, OUTPUT);  //设置LED管脚输出模式
  pinMode(buttonPin, INPUT_PULLUP); //设置按键管脚上拉输入模式
}

void loop() {
  if (digitalRead(buttonPin) == LOW) { // 若按键被按下
    delay(80); //等待跳过按键抖动的不稳定过程
    if (digitalRead(buttonPin) == LOW) // 若按键被按下
    {      
      digitalWrite(ledPin, HIGH); // 点亮LED灯
    }
  }
  else {   
    digitalWrite(ledPin, LOW); // 熄灭LED灯
  }

}
  1. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

程序下载

实验现象 #

按下按键,LED灯点亮。放开按键,LED灯熄灭。

实验现象

函数介绍 #

digitalRead()

  • 描述:读取指定数字引脚的值
  • 函数原型:digitalRead(pin)
  • 参数:要读取的数字引脚编号
  • 返回值:HIGH(1)或LOW(0)

总结分析 #

通过digitalRead()函数来读取数字I/O引脚状态,然后根据状态去点亮或者熄灭LED灯。需要注意:

  • 由于Arduino上电后,数字I/O管脚处于悬空状态,此时通过digitalRead()读到的是一个不稳定的值(可能是高,也可能是低)。所以通过pinMode()函数设置按键引脚为上拉输入模式。即使用内部上拉电阻,按键未按下时,引脚将为高电平,按键按下为低电平。
  • 按键在按下的过程中,有一段接触未接触的不稳定过程,即按键的抖动。在判断按键状态时,通过delay()延时跳过抖动的不稳定状态,即软件上进行消抖。
  • 可以不使用内部上拉电阻,在电路上添加按键的上拉电阻或下拉电阻,可达到相同效果。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注