一、背景
通常我们用到的机械按键,在按下时会有机械抖动,因此在判断按键时需要一定延时进行消抖。
二、硬件
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翻转