一、背景
通常我们用到的机械按键,在按下时会有机械抖动,因此在判断按键时需要一定延时进行消抖。
二、硬件
D13接LED指示灯,D4接按键输入,默认接10K上拉电阻
三、程序
const int buttonPin = 4; //输入按键引脚
const int ledPin = 13; //LED引脚
int ledState = HIGH; // 指示灯的当前状态
int buttonState; // 按键当前状态
int lastButtonState = LOW; // 按键之前状态
unsigned long lastDebounceTime = 0; // 上一次LED改变时的时间
unsigned long debounceDelay = 50; // 去抖时间
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, ledState);//灯的设定状态
}
void loop() {
//当前开关状态
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {//按键按下
lastDebounceTime = millis();//复位去抖计时器 }
if ((millis() - lastDebounceTime) > debounceDelay) {//等待延时
if (reading != buttonState) {//按键任然按下
buttonState = reading;
//如果按键按下,翻转LED灯
if (buttonState == LOW) {
ledState = !ledState;
}
}
}
// 设置LED
digitalWrite(ledPin, ledState);
// 保存之前按键状态值
lastButtonState = reading;
}
四、效果
按键按下时LED翻转
我要赚赏金
