Как прервать цикл времени внутри чувствительного условия - PullRequest
0 голосов
/ 21 марта 2019

Суть моего псевдо-кода заключается в следующем (я упростил его, чтобы упорядочить более простые ответы):

if (vibrate == 1){ //this is the input sensing to the arduino. 
  //It is either 1 or 0
  //constantly run a while loop IF vibrate ==1
  i=51;
  while(vibrate ==1){
     analogWrite(Motor,i); //constantly outputing a pulse of increasing magnitude
     delay(10); //delay it for a certain period of time
     i=i+50; //increment i 
     if (i>=255){
       i=51;
     }
  }
}
else{ //do something else. Has it's own functions}

Теперь с датчика поступает вибрация. Если вибрация равна 1, я бы автоматически захотел вывести линейный импульс (то есть, в то время как цикл). Однако, если вибрация меняет свое значение (т.е. обнуляется), я бы хотел, чтобы цикл while не запускался, а если он запущен, я хотел бы выйти из цикла while. Проблема, с которой я сталкиваюсь, заключается в том, что вибрация обновляется вне цикла while, и, следовательно, я получу бесконечный цикл. Есть ли лучший способ включить это? Я также не могу обновить значение вибрации в цикле while, поскольку мне нужно также проверить большее «если».

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

Внутри цикла вы можете вызвать break;, чтобы продолжить выполнение вне цикла, в котором вы его вызвали.

1 голос
/ 25 марта 2019

обновить переменную вибрации в цикле while. Вам не нужно использовать перерыв

void updateVibrate(){
       //UPDATE THE VIBRATE VARIABLE
    }

    if (vibrate == 1){ //this is the input sensing to the arduino. 
      //It is either 1 or 0
      //constantly run a while loop IF vibrate ==1
      i=51;
      while(vibrate ==1){
         analogWrite(Motor,i); //constantly outputing a pulse of increasing magnitude
         delay(10); //delay it for a certain period of time
         i=i+50; //increment i 
         if (i>=255){
           i=51;
         }
       updateVibrate();//Call function which will update the vibrate (Global) Variable
      }
    }
    else{ //do something else. Has it's own functions}

В качестве альтернативы, когда у вас фиксированное количество итераций, вы можете использовать цикл for с оператором break

...