2017-01-08 18 views
1

私は リンクrinkydinkelectronicsによりDS3231と呼ばれるライブラリ使用しています:http://www.rinkydinkelectronics.com/library.php?id=73(マニュアルをクリックしてください)このエラーを修正するにはどうすればよいですか? (arduinoの鋳造)

私は次のコード

String alarmTime = "08:52:00"; 

     void loop(){ 
      if (rtc.getTimeStr() == alarmTime){ 
      alarmState = true; 
      } 
} 

を実行しようとしているが、私は、次の取得をエラー:

exit status 1 no match for 'operator==' (operand types are 'char*' and 'String')

ライブラリマニュアルは、しかし、これは動作しない理由:(

を私は見ていないので、戻り値は文字列であることを言います

誰かがこれを解決する手助けをしたり、何が間違っているかも教えてもらえますか?

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

+0

ラップ私はあなたが、私は全く少し新しいごめんなさい意味を理解していないのstd ::文字列(...) '' –

+0

で復帰この あなたは何を意味するか教えてください。 –

+1

私は答えを投稿します。しかし、C++コーディングを練習してください。 –

答えて

2

あなたのコードが正しく理解されていれば、両方の文字列が等しいかどうかを確認する必要があります。標準ライブラリはArduino IDEでは使用できないため、別の方法を選択する必要があります。 Cの文字列(char*)をString objectに変換します。

例:

if(String(rtc.getTimerStr()) == alarmTime) { 
    .... 
} 

これは動作するはずです。

+0

私はalarmTimeを次のように宣言します: std :: String alarmTime = "08:52:00"; 私はエラーを取得: それは答えを受け入れてください動作する場合変更されたコード –

+1

「名前空間に 『文字列』 『STD』のタイプに名前を付けていません」; D –

+0

を試してみてください –

1

2つの異なるものを紛らわしく似た名前で比較しようとしています。 string(Cスタイルの文字列)はnullで終わる文字配列です。これはString objectとは異なります。できるだけ多くのメモリを使用し、動的メモリ割り当てからメモリの断片化を引き起こす可能性があるため、標準のArduinoボードなどの極端にメモリが限られたハードウェアでは、Stringクラスの使用を避ける必要があります。代わりに文字列を使用する方がはるかに優れています。これは実際にはStringと同じように扱いやすくなります。

文字列のみを使用してコード:

char alarmTime[] = "08:52:00"; 

void loop() { 
    if (strcmp(rtc.getTimeStr(), alarmTime) == 0) { 
    alarmState = true; 
    } 
} 
関連する問題