一个低级的按键消抖-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2276|回复: 2

一个低级的按键消抖

[复制链接]
发表于 2021-3-27 04:28 | 显示全部楼层 |阅读模式


用着没发现什么问题
:lol


boolean A=false;

void setup()
{
  Serial.begin(115200);

  //初始化引脚
  pinMode(LED_BUILTIN,OUTPUT);
  pinMode(D1,INPUT);
  digitalWrite(LED_BUILTIN,HIGH);

}

void loop()
{
    if (digitalRead(D1)==HIGH&&A==false)
    {
      A=true;
      Serial.println("开关动作");
      if(digitalRead(LED_BUILTIN)==HIGH)
      {
        Serial.println("打开");
        digitalWrite(LED_BUILTIN,LOW);
      }
      else
      {
        Serial.println("关闭");
        digitalWrite(LED_BUILTIN,HIGH);
      }
    }
    else if(digitalRead(D1)==LOW){A=false;}
}

发表于 2021-3-27 07:10 来自手机 | 显示全部楼层
果断收藏,一直都在关注消抖的文章
发表于 2021-11-20 16:04 | 显示全部楼层
本帖最后由 BLACKBLUE 于 2021-11-20 16:10 编辑

#include <PinChangeInt.h>
uint32_t xxx_ ISR_time;
bool LED_BUILTIN_state ;
......
void setup(){
pinMode(xxx_pin, INPUT_PULLUP); //内部上拉,按下是低电平
pinMode(yyy_pin, INPUT);               //悬空或者有物理下拉,按下高电平
digitalWrite(yyy_pin, LOW);             //确定初始态

attachPinChangeInterrupt(xxx_pin,xxx_fun,  FALLING);  //
attachPinChangeInterrupt(yyy_pin,yyy_fun, RISING);
.....
}

void loop(){
digitalWrite(LED_BUILTIN,LED_BUILTIN_state);

}


void xxx_fun() {  
  if (millis() - xxx_ISR_time > 200)
  {
      xxx_ ISR_time = millis();
     LED_BUILTIN_state = true;  }
}
.....
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 08:33 , Processed in 0.089475 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表