2016-09-12 3 views
1

433 MHzの受信機433レシーバArduinoのif文

Arduinoの環境

送信は正常に動作しますYNまたはMを送信します。問題は、レシーバのコードにあります。目標は、受信者が値メッセージをNに等しいとした後、事を行うifステートメントをトリガーすると仮定します。私は、レシーバが特定の値を取るかどうかを判断できるシステムを持つだけです。

void loop() 
{ 
    if (vw_get_message(message, &messageLength)) // Non-blocking 
    { 
     Serial.print("Received: "); 
     for (int i = 0; i < messageLength; i++) 
     { 
      Serial.write(message[i]); 
      const char *p = reinterpret_cast<const char*>(message); 
      if(p == "N") 
      { 
       Serial.print("if statement works when = N"); 
      } 
     } 
    } 
} 

問題は、それは単に仕事をしないで、そして闘争の2週間後、私は途方に暮れて完全にしています。このコードはコンパイルされて実行されますが、if文は完全に無視されます。

+1

'char'と' string'を比較しています。引用符はC++に違いがあります。それを確認します。 – ray

+0

ここで 'p'は変数へのポインタであり、' 'N''は定数へのポインタです。したがって、それらの値が等しいことはほとんど不可能です。 –

答えて

1

はありがたいことに、私は解決策を見つけることができたことができます。

作業コード:

void loop() 
{ 
     if (vw_get_message(message, &messageLength)) 
    { 
     for (int i = 0; i < messageLength; i++) 
     { 
      const char *p = reinterpret_cast<const char*>(message); 
      if(p[0] == 'Y') 
      { 
        Serial.print(" - Yes"); 
        break; 
      } 
      else if(p[0] == 'N') 
      { 
        Serial.print(" - No"); 
        break; 
      } 
     } 
     Serial.println(); 
    } 
} 

const char *p = reinterpret_cast<const char*>(message);の点は、charに、バイトでmessageをオンすることでした。はいpはポインタですが、charを指しているので、pが指し示すcharのデータは、p [#]のように取得できます。単純なif文を作成できるようになりました。

if(p[0] == 'M') 
{ 
    ... 
} 
-1

messageはどのようなタイプですか?とにかく、今はpに格納されている値と比較しています(メモリ内のアドレスではありません)。文字列(二重引用符に気づく)に比較しています。なぜあなたはしないでください

if(message[i] == 'N') 

ここで一重引用符はcharリテラルを意味します。

3

if (p=="N")は2つのポインタを比較します。彼らが指し示す内容は同一であることができますが、それはポインタそのものが等しいことを意味するものではありません。

あなたはstrcmp(Cスタイル)またはstd::string::operator==(標準的なC++)