If statement 带设置/复位按钮的Arduino定时器

If statement 带设置/复位按钮的Arduino定时器,if-statement,timer,automation,arduino,servo,If Statement,Timer,Automation,Arduino,Servo,我正在为我的马建造一个自动干草喂食器,类似这样的东西,但只有两层

我正在为我的马建造一个自动干草喂食器,类似这样的东西,但只有两层

<每24小时,中间的板应该掉落,让干草掉下来让马吃,接口应该非常简单,3个按钮一个启动计时器,一个停止它并部署干草,一个在初始位置重置伺服以再次锁定板,我在计时器上有一些问题,当我按下绿色按钮时,它会启动,但当它完成计数后,它会停止,我必须再次按下绿色按钮,它会一直运行,除非我按下红色按钮重置它

const int greenB = 2; 
const int redB = 3;        

int inAction = 0;
int greenState = 0;
int redState = 0;         
void setup() {

Serial.begin(9600);
pinMode(greenB, INPUT);
pinMode(redB, INPUT);
}

void loop() {

  greenState = digitalRead(greenB);
  redState = digitalRead(redB);

  if(greenState == HIGH){
    inAction = 1;
    while(inAction == 1){
      for(int i = 0; i<10;i++){
        if(redState == HIGH){
          Serial.println("timer stopped");
          goto stopTimer;        
        }
        if(i == 9){
          Serial.println("Cycle completed");
        }
         
        Serial.println("10 seconds timer");
        delay(1000);  
      }
      stopTimer: inAction = 0; 
      
    }
  }
}
const int greenB=2;
常数int redB=3;
int不活动=0;
int-greenState=0;
int redState=0;
无效设置(){
Serial.begin(9600);
pinMode(绿色B,输入);
pinMode(redB,输入);
}
void循环(){
绿色状态=数字读取(绿色B);
redState=数字读取(redB);
如果(绿色状态==高){
不作为=1;
while(不活动==1){

for(int i=0;i因为您使用了goto,所以导致了一个问题。一旦代码到达for循环的末尾,它就会到达标记为stopTimer:的行,并将inAction设置为0。这将停止所有操作,直到您再次按下绿色按钮

不需要使用GOTO,在C++中。如果你曾经发现你想使用GOTO,那么你很可能做错事。试试这个:

void loop() {

  greenState = digitalRead(greenB);
  redState = digitalRead(redB);

  if(greenState == HIGH){
    inAction = 1;
    while(inAction == 1){
      for(int i = 0; i<10;i++){
        if(redState == HIGH){
          Serial.println("timer stopped");
          inAction = 0;
          break;   // Ends the for loop right here:       
        }
        if(i == 9){
          Serial.println("Cycle completed");
        }
         
        Serial.println("10 seconds timer");
        delay(1000);  
      }      
    }
  }
}
void循环(){
绿色状态=数字读取(绿色B);
redState=数字读取(redB);
如果(绿色状态==高){
不作为=1;
while(不活动==1){
对于(int i=0;i
void loop() {

  greenState = digitalRead(greenB);
  redState = digitalRead(redB);

  if(greenState == HIGH){
    inAction = 1;
  }
  if(inAction == 1){
    for(int i = 0; i<10;i++){
      if(redState == HIGH){
        Serial.println("timer stopped");
        inAction = 0;
        break;   // Ends the for loop right here:       
      }
      if(i == 9){
        Serial.println("Cycle completed");
      }
         
      Serial.println("10 seconds timer");
      delay(1000);  
      }      
    }
  }
}