2017-06-26 6 views
-1

現在、いつでも中断することができるループを実行する必要があるプログラムを作成しています。この場合、一連のトーンが繰り返し再生されていますが、センサーからの値の1つがHIGHに戻ると停止する必要があります。現時点で 条件が満たされていないときにwhileループを終了する

は、私はこれを持っている:それは内部の命令の実行が終了したときに

void loop() { 
while(digitalRead(ctsPin) == LOW) { 
    // Some code here 
    } 
} 

しかし、whileループのみが解除されます。これらを何度も繰り返して実行できる方法はありますか?途中であっても、いつでも停止することはできますか?

ありがとうございます。

+1

入力を頻繁にポーリングすることを意味しますか?なぜループ内の条件のためのいくつかの 'if'チェックを追加しないでください?あなたは 'break'ステートメントについて知っていますか? –

+0

私は 'break'ステートメントについて知っていますが、可能であれば、いつでもそれを止める何かを探しています。 –

+1

これは初心者向けのチュートリアルサイトではありません。あなたは[良い、入門的な本を読む](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)より良いです。 – juanchopanza

答えて

2

実際に実行中のループ内のコードにかかわらず、ハードコードされた遅延(トーン)が多いループをすぐに中断する方法を実際に尋ねています。それは不可能です。

ループ全体でステートメントをたくさん追加すると、遅延ベースのコードが実行されるまで現在のトーンを再生できないため、ステートメントをループ全体に追加することは役に立ちません。

代わりに、再生するアイテムを含むキュー/リングバッファを作成することもできます。トーンを演奏するPWM割り込みはこのキューを通過し、一度に1つずつ再生します。

停止したい場合は、単に割り込みを無効にし、ポートピンをサイレント状態にするだけです。プログラムがトーン信号の2つのエッジの間でパートを演奏していても、これは直ちに停止します。

1

breakステートメントは、現在のループを中断します。したがって、監視している状態の条件文が必要です。真と評価された場合は、breakに電話してください。

if (digitalRead(ctsPin) == HIGH){ break }

0

質問は明らかではありません。ループの実行を停止するには、以下のようにbreakを使用します。これがあなたが探しているものかどうか確認してください。

void loop() { 
    while(digitalRead(ctsPin) == LOW) { 
     // Some code here 
     if (digitalRead(ctsPin) == HIGH){ 
      break; 
     } 
     // Some code here 
     } 
    } 
0

「即座に」中断する方法は2つあります。一つは、割り込みを使用することであり、もう一つは、より多くの場合、条件をチェックすることです - 本当に必要な場合は、各命令の後に、その後、抜け出す:

void loop() 
{ 
    while(digitalRead(ctsPin) == LOW) 
    { 
     // code block (or even a single statement)... 
     if (digitalRead(ctsPin) == HIGH) break; 
     // code block (or even a single statement)... 
     if (digitalRead(ctsPin) == HIGH) break; 
     // code block (or even a single statement)... 
     if (digitalRead(ctsPin) == HIGH) break; 
     // etc. 
    } 
} 

あなたはこれらのあまりに多くを取得する場合、それは賢明であるかもしれ代わりに割り込みを調べる必要があります。それを行う方法とターゲットボードで使用できるさまざまな割り込みの例については、Arduino Interrupt Documentationを参照してください。

あなたがその方法に進むことを決めた場合は、試してみてください。問題が発生した場合は、別の質問をしてください。お手伝いします。

関連する問題