Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Button 我想计算按钮(开关)在执行之前的按下次数_Button_Arduino_Embedded - Fatal编程技术网

Button 我想计算按钮(开关)在执行之前的按下次数

Button 我想计算按钮(开关)在执行之前的按下次数,button,arduino,embedded,Button,Arduino,Embedded,我的代码只执行案例1。如果我按3次,我需要。它将执行我的案例3。多谢各位 int pushButton = 13; void setup() { Serial.begin(9600); pinMode(pushButton, INPUT); for(int pin=10;pin<=12;pin++){ pinMode(pin,OUTPUT); } } void loop() { int ctr=0; int buttonState = digitalRead(pus

我的代码只执行案例1。如果我按3次,我需要。它将执行我的案例3。多谢各位

int pushButton = 13;

void setup() {
  Serial.begin(9600);
  pinMode(pushButton, INPUT);
for(int pin=10;pin<=12;pin++){
  pinMode(pin,OUTPUT);
}
}

void loop() {
  int ctr=0;
  int buttonState = digitalRead(pushButton);


 if(buttonState ==1)
  {
    ctr+=1;   
    Serial.println(ctr);


  }
  switch (ctr) {
  case 1:
  Serial.println("00000000000000000000");
     blinking();
    break;
  case 2:
  Serial.println("AAAAAAAAAAAAAAAA");
    running();

    break;
  case 3:
    incremental();
  default: 
    Serial.println("push the button");
}



}



void blinking(){

    for(int z=0;z<=3;z++){
    for(int i=10;i<=12;i++){
      digitalWrite(i,HIGH);
    }delay(500);
    for(int i=10;i<=12;i++){
      digitalWrite(i,LOW);
    }delay(500);
    }

}

void running(){
 for(int z=0;z<=2;z++){ 
   for(int i=10;i<=12;i++){
     digitalWrite(i,HIGH);
     delay(500);
     digitalWrite(i,LOW);
  }   
 } 

}


void incremental(){
 for(int z=0;z<=2;z++){
    int d=1500;
   for(int i=10;i<=12;i++){
    digitalWrite(i,HIGH);
    delay(d); d-=500;
   }
   for(int i=10;i<=12;i++){
    digitalWrite(i,LOW);
   }delay(500);  
  } 


}
int按钮=13;
无效设置(){
Serial.begin(9600);
pinMode(按钮,输入);

对于(int pin=10;pin将
int ctr=0
更改为
静态int ctr=0

它与具有全局范围的declare
ctr
相同

每次调用
loop
函数时,它都不会重置为
0


应检查按钮去抖动。

除了ctr在每次
循环()时被分配为零之外
运行时,您还存在一个问题,即如果按下按钮,
ctr
将持续增加,这可能不是您想要的。当默认情况将无限期运行时,它还会在三点之后增加
ctr
。目前还不清楚您是否打算将情况3改为默认情况;通常会考虑这种情况糟糕的做法或错误,如果是故意的,那么值得一提

以下代码使
ctr
为静态,因此它也不总是被指定为零,并且仅当按下按钮时才会增加
ctr
,如果只是按住或卡住按钮,则不会增加。在默认情况下,它还会将
ctr
返回到零,以便您可以循环状态(这可能不是您的意图).为了清晰起见,我已删除调试输出

void loop() 
{
  static int ctr = 0 ;
  static bool button_down = false ;
  int button_state = digitalRead(pushButton) == 1 ;

  if( !button_down && button_state = 1 )
  {
    ctr++ ;
    button_down = true ;
  }
  else if( button_state = 0 )
  {
     button_down = false ;
  }

  switch( ctr ) 
  {
    case 1:
      blinking();
    break;

    case 2:
      running();
    break;

    case 3:
      incremental();
    break ;

    default: 
        ctr = 0 ;
    break ;
  }
}

你需要消除按钮的反弹(应用一些简单的数字滤波器来消除按下任何按钮时出现的机电信号反弹)。