控制LED
实验目的
通过一个按键控制一个发光二极管的亮和灭。按键按一下LED点亮,在按一下LED熄灭
原理图
- 按键检测原理
通过把arduino的数字I/O设置为输入状态来监控按键是否按下,当按键未按下时候因为有上拉电阻存在,读到的电平为HIGH,当按键按下时候因为按键引脚接地,所以读回来的电平为LOW,由此判断按键是否按下 - 按键去抖动原理
因为人手的机械动作是按键按下的时候会产生大约20ms的按键抖动,所以要在检测到低电平后延迟20ms再次检测可以起到去抖动的作用,用delay(20); - 松手检测原理
松手检测原理就是程序无限循环等待按键松开,让程序不断的去检测I/O装填,如果恢复HIGH就跳出了循环,while(digitalRead(key) == 0);
代码编写
int led = 13;
int key = 2;
int key_num = 0;//按键值存放变量,不等于1说明有按键按下
void setup() {
// put your setup code here, to run once:
pinMode(led, OUTPUT); //定义led为输出引脚
pinMode(key, INPUT_PULLUP); //定义key为带上拉输入引脚
}
void loop() {
// put your main code here, to run repeatedly:
Scankey();//按键扫描程序,当按键按下的时候,该程序会修改key_num的值
if (key_num == 1) { //是否按键按下
digitalWrite(led, !digitalRead(led)); //led的状态翻转
}
}
void Scankey() {
//按键扫描程序
key_num = 0;//清空变量
if (digitalRead(key) == LOW) { //有按键按下
delay(20);//延时去抖动
if (digitalRead(key) == LOW) { //有按键按下
key_num = 1;//将变量设置为1
while (digitalRead(key) == LOW); //等待按键松手
}
}
}
/*
函数的用法:
digitalRead();
函数的作用:读取数字引脚HIGH(高电平)或者LOW(低电平)
语法:
digitalRead(pin);
参数:
pin:被读取的引脚号码
返回值:
HIGH或者LOW
*/