美文网首页
arduino最易消抖方法--按钮开关的使用

arduino最易消抖方法--按钮开关的使用

作者: Mr洋1 | 来源:发表于2019-08-21 10:16 被阅读0次
    • 代码一 按下点亮 不按熄灭
    int led = 13;
    int button = 3;
    void setup(){
      pinMode(led,OUTPUT);
      pinMode(button,INPUT);
    }
    void loop(){
      Bstate = digitalRead(button);
      if (Bstate){
      digitalWrite(led,HIGH);
    }else{
      digitalWrite(led,LOW);
    }
    }
    
    
    按一次点亮
    • 按一次点亮 再按一次熄灭
    int led = 13;
    int button = 3;
    int state = 0;
    void setup(){
      pinMode(led,OUTPUT);
      pinMode(button,INPUT);
    }
    void loop(){
      state = digitalRead(button);
      if (state){
      digitalWrite(led,state);
      state = !state;
    } 
    }
    
    

    效果不对 理论上没有错

    error
    • 代码检查测试 抖动的原因
    int led = 13;
    int button = 3;
    int state = 0;
    int num =0;
    void setup(){
      pinMode(led,OUTPUT);
      pinMode(button,INPUT);
      Serial.begin(9600);
    }
    void loop(){
      state = digitalRead(button);
      if (state){
      digitalWrite(led,state);
      state = !state;
      num++;
      Serial.println(num);
    } 
    }
    
    

    测试结果
    按下开关 数字跳动很快


    抖动
    • 改进版本 001 delay
    int led = 13;
    int button = 3;
    int state = 0;
    int num =0;
    void setup(){
      pinMode(led,OUTPUT);
      pinMode(button,INPUT);
      Serial.begin(9600);
    }
    void loop(){
      state = digitalRead(button);
      if (state){
      digitalWrite(led,state);
      state = !state;
      num++;
      Serial.println(num);
      delay(200);
    } 
    }
    
    
    delay
    • 最终改进版本2 flag
    int state = 1;
    int button = 3 ;
    int led = 9;
    int num=0;
    int Before=0;
    void setup(){
      pinMode(led,OUTPUT);
      Serial.begin(9600);
      
    }
    
    void loop(){
    
      int Bstate = digitalRead(button);
    
      //Serial.println(Bstate);
      if (Bstate && Before==0){
        digitalWrite(led,state);
        state = !state;
        num++;
        Serial.println(num);
        //delay(200);
        Before =!Before;
      }else if(Bstate ==0 &&Before == 1){
        Before = !Before;
      }
    }
    
    
    代码
    final

    图形化最终:


    图形化

    相关文章

      网友评论

          本文标题:arduino最易消抖方法--按钮开关的使用

          本文链接:https://www.haomeiwen.com/subject/xggvsctx.html