arduino最易消抖方法--按鈕開關(guān)的使用

  • 代碼一 按下點亮 不按熄滅
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);
} 
}

測試結(jié)果
按下開關(guān) 數(shù)字跳動很快


抖動
  • 改進版本 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

圖形化最終:


圖形化
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容