2017-01-25 11 views
0

ループで停止するにはコードが必要ですが、ブレークを入れようとしましたが、sendToGCM()メソッドが続行されます。私は一度しか実行されないメソッドを実行したい場合は、条件を停止します。条件がアクティブなときarduinoループを停止する

void loop() 
{ 

    // Other code here giving temp a value 

    if (temp > 22) 
    { 
    status = false; 
    value["status"] = status; 
    while (temp > 22) 
    { 
     sendToGCM(); // Sends push notification 
     break; 
    } 
    } 
    else 
    { 
    status = true; 
    value["status"] = status; 
    } 
} 
+0

'メソッドのsendToGCM()が続きます。これはどういう意味ですか?この機能を見ることはできますか? –

+0

また、関数を一度呼び出すだけの場合は、whileループを使用しないでください。 –

+1

質問は明確ではありません。 'break'は' while'ループを終了します。ボードが電源供給されている限り、「ループ」機能は依然として定期的に呼び出されます。 – ZDF

答えて

0

問題は、tempを設定してからその値をチェックするループを入力することです。簡単な解決策は、アプリケーションにwhileループから脱出する機会を与えるために、whileループ内のtemp値を更新することです。

例:

void loop() 
{ 

    // Other code here giving temp a value 

    if (temp > 22) 
    { 
    status = false; 
    value["status"] = status; 
    while (temp > 22) 
    { 
     sendToGCM(); // Sends push notification 

     //Additional code to set the value of temp, allowing the value to 
     //be greater than 22. 
    } 
    } 
    else 
    { 
    status = true; 
    value["status"] = status; 
    } 
} 

がちょうどしばらくからsendToGCMを()を削除し、一時値が22を超えている間、それは意図ではない場合は、上記の例は、継続的にプッシュ通知を送信するために意図されていることに注意してくださいループ。もしあなたがifチェックをしているので、あなたはそれがまだtempより大きい場合にのみそれを送信します。

2

もしあなたが正しく理解していれば、気温が22度になったらメッセージを送ろうと思うが、初めてだ。ループを中断した場合は、loop()機能が再度実行された場合でも入力します。あなたがメッセージに、温度が22度以上に上がるたびに送信したい場合は

あなたが何をしたい達成するために、あなたはコードがこの

boolean message_sent; 

void loop() { 
    ... 
    if(temperature > 22 && !message_sent) { 
     sendToGCM(); 
     message_sent = true;    
    } 
} 

のようなものを見てする必要がありますあなたのようなものが必要になりますこの

boolean message_sent; 
boolean was_under_22; 

void setup() { 
    ... 
    was_under_22 = function_that_checks_if_temp_is_under_22(); 
    ... 
} 

void loop() { 
    ... 
    if(temperature > 22 && was_under_22) { 
     if(!message_sent) { 
      sendToGCM(); 
      message_sent = true; 
      was_under_22 = false;    
     } 
    } else { 
     was_under_22 = true; 
     message_sent = false; 
    } 
} 

EDIT:は少しパトリックTrentinさんのコメントに反応して、コードを適応しました。このコードでは、気温が22度以上に上昇した場合のみ、Arduinoが22度以上で始まる場合はメッセージは送信されません。

+0

ありがとうございました –

+1

@wastlの2番目の例では、温度上昇*の*イベント*を捕捉したいと述べていますが、温度値にかかわらず 'was_under_22'は' true'に設定され、メッセージにつながります* Arduino *を起動したときに既に温度が22℃以上になっていても発火します。特定のアプリケーションで意図されたものではないかもしれませんが、あなたの説明と一致しません。ループの最初の反復を除いて実際には 'was_under_22'は常にあなたのスケッチに当てはまります。だから誤解を招くだけでなく無意味です。 –

+0

@PatrickTrentinあなたは正しいです、私は私の答えに適合しました – wastl