Button 在arduino代码中向按钮添加去抖动功能

Button 在arduino代码中向按钮添加去抖动功能,button,arduino,debounce,Button,Arduino,Debounce,我已经做了一个传输控制器和代码工作良好,因为它是。但我想在代码中添加去盎司功能,因为在按下按钮时有时无法识别位移。我远不是一个好的程序员,所以这段代码非常简单,我理解其中的一切。但是我不知道如何在不推进代码的情况下为按钮添加去抖动,因为我太不理解它了 有人能给我一些帮助或提示吗?见所附代码 int gear = 1; // output pins for transistor controlled solenoids int solA = 4; int solB = 5; int solC =

我已经做了一个传输控制器和代码工作良好,因为它是。但我想在代码中添加去盎司功能,因为在按下按钮时有时无法识别位移。我远不是一个好的程序员,所以这段代码非常简单,我理解其中的一切。但是我不知道如何在不推进代码的情况下为按钮添加去抖动,因为我太不理解它了

有人能给我一些帮助或提示吗?见所附代码

int gear = 1;
// output pins for transistor controlled solenoids
int solA = 4;
int solB = 5;
int solC = 6;
int solD = 7;
int solE = 8;
int solTCC = 9;
int solLinePress = 10;
// input pins for up down /  with pullup resistors
int gearup = 2;
int geardown = 3;

// Pin out for single 7 digit display
int a=22; 
int b=23; 
int c=24; 
int d=25; 
int e=26; 
int f=27; 
int g=28;

void setup() {
  pinMode(solA, OUTPUT);
  pinMode(solB, OUTPUT);
  pinMode(solC, OUTPUT);
  pinMode(solD, OUTPUT);
  pinMode(solE, OUTPUT);
  pinMode(solTCC, OUTPUT);
  pinMode(solLinePress, OUTPUT);
  pinMode(gearup, INPUT);
  pinMode(geardown, INPUT);
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
}

void loop() {

 if(gear == -1){ // Reverse

    digitalWrite(solA, 1);
    digitalWrite(solB, 1);
    digitalWrite(solC, 1);
    digitalWrite(solD, 0);
    digitalWrite(solE, 1);
    digitalWrite(solTCC, 0);
    digitalWrite(solLinePress, 0);

    digitalWrite(a, LOW);
    digitalWrite(b, LOW);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);

  }
      if(gear == 0){ // Neutral

    digitalWrite(solA, 1);
    digitalWrite(solB, 1);
    digitalWrite(solC, 1);
    digitalWrite(solD, 1);
    digitalWrite(solE, 1);
    digitalWrite(solTCC, 0);
    digitalWrite(solLinePress, 0);

    digitalWrite(a, LOW);
    digitalWrite(b, LOW);
    digitalWrite(c, LOW);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, HIGH);

  }

  if(gear == 1){ // 1th gear

    digitalWrite(solA, 1);
    digitalWrite(solB, 1);
    digitalWrite(solC, 0);
    digitalWrite(solD, 1);
    digitalWrite(solE, 1);
    digitalWrite(solTCC, 0);
    digitalWrite(solLinePress, 0);

    digitalWrite(a, LOW);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);

  }
  if(gear == 2){ // 2nd Gear

    digitalWrite(solA, 1);
    digitalWrite(solB, 1);
    digitalWrite(solC, 1);
    digitalWrite(solD, 1);
    digitalWrite(solE, 0);
    digitalWrite(solTCC, 0);
    digitalWrite(solLinePress, 0);

    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, LOW);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, LOW);
    digitalWrite(g, HIGH);
  }
  if(gear == 3){ // 3rd Gear

    digitalWrite(solA, 0);
    digitalWrite(solB, 1);
    digitalWrite(solC, 0);
    digitalWrite(solD, 1);
    digitalWrite(solE, 0);
    digitalWrite(solTCC, 0);
    digitalWrite(solLinePress, 0);

    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, HIGH);

  }
  if(gear == 4){ // 4th Gear

    digitalWrite(solA, 0);
    digitalWrite(solB, 1);
    digitalWrite(solC, 1);
    digitalWrite(solD, 0);
    digitalWrite(solE, 0);
    digitalWrite(solTCC, 0);
    digitalWrite(solLinePress, 0);

    digitalWrite(a, LOW);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);

 }
  if(gear == 5){ // 5th Gear

    digitalWrite(solA, 0);
    digitalWrite(solB, 1);
    digitalWrite(solC, 0);
    digitalWrite(solD, 0);
    digitalWrite(solE, 1);
    digitalWrite(solTCC, 0);
    digitalWrite(solLinePress, 0);

    digitalWrite(a, HIGH);
    digitalWrite(b, LOW);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
     }
  if(gear == 6){ / // 6th Gear

    digitalWrite(solA, 0);
    digitalWrite(solB, 0);
    digitalWrite(solC, 0);
    digitalWrite(solD, 0);
    digitalWrite(solE, 0);
    digitalWrite(solTCC, 0);
    digitalWrite(solLinePress, 0);

    digitalWrite(a, HIGH);
    digitalWrite(b, LOW);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);

     }
  if(gear == 7){ // 7th Gear

    digitalWrite(solA, 1);
    digitalWrite(solB, 0);
    digitalWrite(solC, 0);
    digitalWrite(solD, 0);
    digitalWrite(solE, 1);
    digitalWrite(solTCC, 0);
    digitalWrite(solLinePress, 0);

    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);


       }
  if(gear == 8){ // 8th Gear

    digitalWrite(solA, 1);
    digitalWrite(solB, 0);
    digitalWrite(solC, 1);
    digitalWrite(solD, 0);
    digitalWrite(solE, 0);
    digitalWrite(solTCC, 0);
    digitalWrite(solLinePress, 0);

    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);


  }



  //takes care of gear switching

  delay(150); //delay to prevent going through gears too quick from holding the button or pressing too long

  gear += digitalRead(geardown) - digitalRead(gearup); // non debounced! But may not be a problem because of the delay by gear change
  if(gear < -1) gear = -1;
  if(gear > 8) gear = 8;
  //limits to actual gearset


}
int档位=1;
//晶体管控制电磁阀的输出引脚
int solA=4;
int-solB=5;
int-solC=6;
整数=7;
int-solE=8;
int-soltc=9;
int solLinePress=10;
//上下/带上拉电阻器的输入引脚
整备率=2;
int减速=3;
//用于单个7位显示器的引脚输出
INTA=22;
int b=23;
int c=24;
int d=25;
int e=26;
int f=27;
int g=28;
无效设置(){
pinMode(solA,输出);
pinMode(solB,输出);
pinMode(solC,输出);
pinMode(已售出,输出);
引脚模式(唯一,输出);
引脚模式(solTCC,输出);
pinMode(solLinePress,输出);
pinMode(加速、输入);
pinMode(减速,输入);
pinMode(a,输出);
pinMode(b,输出);
pinMode(c,输出);
pinMode(d,输出);
pinMode(e,输出);
pinMode(f,输出);
pinMode(g,输出);
}
void循环(){
如果(档位==-1){//倒档
digitalWrite(solA,1);
数字写入(solB,1);
数字写入(solC,1);
digitalWrite(已售出,0);
数字写入(唯一,1);
数字写入(solTCC,0);
数字写入(solLinePress,0);
数字写入(a,低);
数字写入(b,低);
数字写入(c,高);
数字写入(d,高);
数字写入(e,高);
数字写入(f,高);
数字写入(g,高);
}
如果(档位==0){//空档
digitalWrite(solA,1);
数字写入(solB,1);
数字写入(solC,1);
digitalWrite(已售出,1台);
数字写入(唯一,1);
数字写入(solTCC,0);
数字写入(solLinePress,0);
数字写入(a,低);
数字写入(b,低);
数字写入(c,低);
数字写入(d,低);
数字写入(e,低位);
数字写入(f,低);
数字写入(g,高);
}
如果(档位==1){//1档
digitalWrite(solA,1);
数字写入(solB,1);
数字写入(solC,0);
digitalWrite(已售出,1台);
数字写入(唯一,1);
数字写入(solTCC,0);
数字写入(solLinePress,0);
数字写入(a,低);
数字写入(b,高);
数字写入(c,高);
数字写入(d,低);
数字写入(e,低位);
数字写入(f,低);
数字写入(g,低);
}
如果(档位==2){//2档
digitalWrite(solA,1);
数字写入(solB,1);
数字写入(solC,1);
digitalWrite(已售出,1台);
数字写入(唯一,0);
数字写入(solTCC,0);
数字写入(solLinePress,0);
数字写入(a,高);
数字写入(b,高);
数字写入(c,低);
数字写入(d,高);
数字写入(e,高);
数字写入(f,低);
数字写入(g,高);
}
如果(档位==3){//3档
数字写入(solA,0);
数字写入(solB,1);
数字写入(solC,0);
digitalWrite(已售出,1台);
数字写入(唯一,0);
数字写入(solTCC,0);
数字写入(solLinePress,0);
数字写入(a,高);
数字写入(b,高);
数字写入(c,高);
数字写入(d,高);
数字写入(e,低位);
数字写入(f,低);
数字写入(g,高);
}
如果(档位==4){//4档
数字写入(solA,0);
数字写入(solB,1);
数字写入(solC,1);
digitalWrite(已售出,0);
数字写入(唯一,0);
数字写入(solTCC,0);
数字写入(solLinePress,0);
数字写入(a,低);
数字写入(b,高);
数字写入(c,高);
数字写入(d,低);
数字写入(e,低位);
数字写入(f,高);
数字写入(g,高);
}
如果(档位==5){//5档
数字写入(solA,0);
数字写入(solB,1);
数字写入(solC,0);
digitalWrite(已售出,0);
数字写入(唯一,1);
数字写入(solTCC,0);
数字写入(solLinePress,0);
数字写入(a,高);
数字写入(b,低);
数字写入(c,高);
数字写入(d,高);
数字写入(e,低位);
数字写入(f,高);
数字写入(g,高);
}
如果(档位==6){///6档
数字写入(solA,0);
数字写入(solB,0);
数字写入(solC,0);
digitalWrite(已售出,0);
数字写入(唯一,0);
数字写入(solTCC,0);
数字写入(solLinePress,0);
数字写入(a,高);
数字写入(b,低);
数字写入(c,高);
数字写入(d,高);
数字写入(e,高);
数字写入(f,高);
数字写入(g,高);
}
如果(档位==7){//7档
digitalWrite(solA,1);
数字写入(solB,0);
数字写入(solC,0);
digitalWrite(已售出,0);
数字写入(唯一,1);
数字写入(solTCC,0);
数字写入(solLinePress,0);
数字写入(a,高);
数字写入(b,高);
数字写入(c,高);
数字写入(d,低);
数字写入(e,低位);
数字写入(f,低);
数字写入(g,低);
}
如果(档位==8){//8档
digitalWrite(solA,1);
数字写入(solB,0);
数字写入(solC,1);
digitalWrite(已售出,0);
数字写入(唯一,0);
数字写入(solTCC,0);
数字写入(solLinePress,0);
数字写入(a,高);
数字写入(b,高);
数字写入(c,高);
数字写入(d,高);
数字写入(e,高);
数字写入(f,高);
数字写入(g,高);
}
//负责换档
延迟(150);//延迟以防止过快通过档位时按住按钮或按下时间过长
档位+=数字读取(降档)-数字读取(升档);//未取消抖动!但可能不是问题,因为换档延迟
如果(档位<-1)档位=-1;
如果(档位>8)档位=8;
//实际齿轮组的限制
}

因为这个问题特别问我如何去弹跳