按键模块采用手感舒适的轻触按键,当按下按键,直接将按键的两极导通连接,而按键两极直接引出连接Arduino的信号线与负极,所以按下按键就表示信号线与负极导通。在实验中,我们利用按下按键触发点亮LED灯,当松开按键时,灯熄灭。
元件清单:
Zduino UNO × 1;
OJ传感器扩展板× 1;
OJ传感器扩展板× 1;
USB数据线 × 1 ;
3p杜邦线 × 2 ;
按键模块 × 1 ;
食人鱼LED模块 × 1 ;
主要知识点:
pinMode(Button, STATE); 配置引脚输入输出状态,只有当配置了过后才能正常操作IO,默认为输入INPUT状态。
STATE可以为INPUT;OUTPUT;INPUT_PULLUP;
INPUT—设置该引脚为输入状态;
OUTPUT—设置该引脚为输出状态;
PULLUP—设置该引脚为输入上拉状态digitalRead(Button); 读取该引脚的状态值。带有返回值。
pinMode(Button, STATE); 配置引脚输入输出状态,只有当配置了过后才能正常操作IO,默认为输入INPUT状态。
STATE可以为INPUT;OUTPUT;INPUT_PULLUP;
INPUT—设置该引脚为输入状态;
OUTPUT—设置该引脚为输出状态;
PULLUP—设置该引脚为输入上拉状态digitalRead(Button); 读取该引脚的状态值。带有返回值。
返回值有0和1;
为0表明读到的是低电平,范围为-0.5V~1.5V将被认为是读到的低电平。
为1 表明读到的是高电平,范围为3V~5.5V被认为读到了高电平。digitalWrite(LEDpin,VAL); 设置引脚输出高或者低电平
VAL可以为HIGH;LOW;
HIGH—设置引脚输出高电平;
LOW—设置引脚输出低电平;
为0表明读到的是低电平,范围为-0.5V~1.5V将被认为是读到的低电平。
为1 表明读到的是高电平,范围为3V~5.5V被认为读到了高电平。digitalWrite(LEDpin,VAL); 设置引脚输出高或者低电平
VAL可以为HIGH;LOW;
HIGH—设置引脚输出高电平;
LOW—设置引脚输出低电平;
接线示意图:
Arduino示例程序:
/*
[url=http://www.openjumper.cn/]www.openjumper.cn[/url]
日期:2013.5.18
IDE 版本:1.0.1
功能:按下按键,LED灯点亮。松开按键,LED灯熄灭。
*/
int Button = 2;
int LEDpin = 13;
void setup() {
pinMode(Button, INPUT_PULLUP); //由于在默认状态时IO口读到的是一个不稳定的电平值,加上拉使之默认接高电平。
pinMode(LEDpin, OUTPUT); //设置13号IO口为输出状态
}
void loop() {
int ButtonState = digitalRead(Button); //设置变量存储读到的状态值
if(ButtonState==0)
{
digitalWrite(LEDpin,HIGH); //判断,如果读到的状态为0,表明按键已经按下,这时候点亮LED
}
else
{
digitalWrite(LEDpin,LOW); // 否则说明按键没有按,熄灭LED
}
}
在实际操作中,可能会出现一个问题,就是按下按键时会出现抖动,抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。这是一个很重要的时间参数,在很多场合都要用到。按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。键抖动会引起一次按键被误读多次。
此处,我们用软件对其进行延时处理消除抖动。
if(ButtonState==0)
{
delay(10);
if(ButtonState==0) {
digitalWrite(LEDpin,HIGH);
}
}
示例程序:
/*
www.openjumper.cn
日期:2013.5.18
IDE 版本:1.0.1
功能:按下按键,LED灯点亮。松开按键,LED灯熄灭。
*/
int Button = 2;
int LEDpin = 13;
void setup() {
pinMode(Button, INPUT_PULLUP); //由于在默认状态时IO口读到的是一个不稳定的电平值,加上拉使之默认接高电平。
pinMode(LEDpin, OUTPUT); //设置13号IO口为输出状态
}
void loop() {
int ButtonState = digitalRead(Button); //设置变量存储读到的状态值
if(ButtonState==0)
{
delay(10);
if(ButtonState==0) //延时消抖处理
{
digitalWrite(LEDpin,HIGH); //判断,如果读到的状态为0,表明按键已经按下,这时候点亮LED
}
}
else
{
digitalWrite(LEDpin,LOW); // 否则说明按键没有按,熄灭LED
}
}
接线实物图:
当什么时候需要设置IO为上拉状态?
答:一般情况下,IO口不接任何电平,用digitalRead()去读它的状态时,读到的是一个不确定的值,不一定是0也不一定是1。这时候观察硬件是否有接一个上拉电阻(提供一个稳定的高电平),如果没有接的话便可以通过软件设置IO口内部加上上拉,也就是 这里的pinMode(Button, INPUT_PULLUP)。
消除抖动是否还有其他方法?
答:另外一种消抖方式为硬件消抖,常用的硬件消抖方式有利用电容的放电延时,采用并联电容法,也可以实现硬件消抖。