>source

내 의사 코드의 본질은 다음과 같습니다 (단순한 답변을 위해 단순화했습니다) :

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 루프)를 자동으로 출력하려고합니다. 그러나 진동이 값을 변경하면 (즉, 0으로 이동) while 루프가 트리거되지 않도록하고 싶습니다. 트리거되면 while 루프를 종료하고 싶습니다. 내가 직면 한 문제는 진동이 while 루프 외부에서 자체적으로 업데이트되므로 무한 루프가 발생한다는 것입니다. 이것을 통합하는 더 좋은 방법이 있습니까? 더 큰 'if'도 확인해야하기 때문에 while 루프에서 진동 값을 업데이트 할 수 없습니다.


  • 답변 # 1

    while 루프 내에서

    진동 변수를 업데이트합니다.break

    를 사용할 필요는 없습니다.
    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 문과 함께 사용할 수 있습니다

  • 답변 # 2

    루프 안에서 break; 를 호출 할 수 있습니다  호출 한 루프 외부에서 실행을 계속하려면

관련 자료

  • 이전 SUBSCRIBE 요청은 어떻게 SIP 대화 상자를 종료 할 수 있습니까?
  • 다음 Haskell에서 함수 매개 변수는 어떻게 전달됩니까?