按键开关简介
按键是一种常用的控制电器元件,常用来接通或断开电路,从而达到控制电机或者其他设备运行的开关。按键的外观多种多样,本次实验使用的是这种微型按键,6mm的,如下图:
由图可知:按键没按下时候:1,2号脚相连,3,4号脚相连。
按键按下去时候,1,2,3,4号脚就全部接通。
按键开关实验
试验一:按键控制LED亮灭
实验说明:
通过串口监视器查看按键输入是高电平(1)还是低电平(0)。
电路搭建:
参考程序:
const int switchPin = 10; // 按键开关连接引脚10
void setup() {
pinMode(switchPin, INPUT); // 设置引脚10为输入模式
Serial.begin(9600); // 设置串口波特率为9600
}
void loop() {
int switchValue = 0; //定义变量并赋初值为0
switchValue = digitalRead(switchPin); //读取引脚7的值
Serial.print(" Value of switch = "); //输出到串口监视器
Serial.println(switchValue); //将读取的按键值输出到串口监视器
}
实验结果
当按键还没按下的时候,串口监视器输出数字1.当按键按下时候,串口监视器输出数字0.
这是上拉电阻的实验结果,大家可以搭建下拉电阻查看情况如何?或者不加电阻的情况如何。
试验二:按键控制LED亮灭
实验说明:
一般情况是直接把按键开关串联在led的电路中来开关,这种应用情况比较单一。这次实验通过间接的方法来控制,按键接通后判断按键电路中的输出电压,如果电压大于4.88V,就使给LED电路输出高电平,反之就输出低电平。使用逻辑判断的方法来控制LED亮或者灭,此种控制方法应用范围较广。
电路搭建:
参考程序:
const int redLedPin = 10; // 红色LED灯连接引脚10
const int switchPin = 13; // 按键开关连接引脚13
void setup() {
pinMode(redLedPin, OUTPUT); //设置引脚10为输出模式
pinMode(switchPin, INPUT); // 设置引脚13为输入模式
Serial.begin(9600); // 设置串口波特率为9600
}
void loop() {
int switchValue = 0; //定义变量并赋初值为0
switchValue = digitalRead(switchPin); //读取引脚13的值
if (switchValue == 0) { //判断键值等于0,执行下面的程序
digitalWrite(redLedPin, HIGH); //点亮红色LED
}
else { //判断键值不为0,将执行下面的语句
digitalWrite(redLedPin, LOW); //熄灭红色LED
}
}
试验三:按键消抖
实验说明:
当你按下按钮的时候,可能期待的结果就是从1到0(从上拉电阻到按钮按下)的变化。但是实际操作起来可能会跟你想象的不太一样。
若没有消除抖动的话,LED的开关就取决于抖动的
次数是奇数还是偶数,存在偶然性。若使用延时消抖动,加了延时之后,200ms之内不会发生任何事,这么长的时间,无论抖动多少次都足够。
通常按键所用的开关都是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键的开关都会
瞬间伴随一连串的抖动,如下图所示:
实验要求:
使用按键开关切换LED的亮暗。也就是:按下按钮时,LED被点亮并保持长亮,若再按一次按钮,则关闭LED。
还有一个有趣的副作用:如果按钮按住不松的话,LED会闪烁。
电路搭建:
参考程序:
int buttonPin = 2;
int ledPin = 9;
int ledValue = LOW;
void setup() {
pinMode(buttonPin,INPUT_PULLUP);
pinMode(ledPin,OUTPUT);
Serial.begin(9600);
}
void loop() {
if(digitalRead(buttonPin) == LOW)
{
ledValue = !ledValue;
digitalWrite(ledPin,ledValue);
delay(200);//延时消抖
}
}
按键开关分类
轻触开关
特点:通过金属弹片/硅胶受力实现通断。
应用产品:几乎所有电子产品。
拨码开关
特点:拨动金属位置实现通断。
应用产品:开发板配置信号
拨动开关
特点:拨动金属位置实现通断。
应用产品:几乎所有电子产品,用于电源。
触摸屏
电阻屏
特点:压力造成两层接插,即:电阻值变化。
应用:手机,平板等。