2017-01-08 3 views
1

Ich verwende eine Bibliothek namens DS3231 von rinkydinkelectronics -Link: http://www.rinkydinkelectronics.com/library.php?id=73 (klicken Sie auf manuell)Wie behebe ich diesen Fehler? (Arduino Guss)

Ich versuche, den folgenden Code

String alarmTime = "08:52:00"; 

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

zu laufen, aber ich bekomme die folgende Fehler:

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

die Bibliothek Handbuch sagt jedoch, dass der Rückgabewert ein String ist, damit ich sehe nicht, warum das nicht funktionieren sollte :(

Kann mir jemand helfen, das Problem zu beheben, oder mir sagen, was falsch sein könnte?

Vielen Dank!

+0

Wickeln Sie die Rückkehr in 'std :: string (...)' –

+0

Ich verstehe nicht, was Sie leider meine, ich bin ein wenig an allen neuen Könnten Sie mir zeigen, was Sie meinen? –

+1

Ich werde eine Antwort posten. Aber bitte üben Sie weiter mit C++ - Code ... –

Antwort

2

Wenn Sie Ihren Code richtig verstanden haben, möchten Sie überprüfen, ob beide Zeichenfolgen gleich sind. Da die Standardbibliothek in der Arduino-IDE nicht verfügbar ist, müssen Sie einen anderen Weg wählen. Konvertieren Sie die C-Zeichenfolge (char*) in eine String object.

Beispiel:

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

Das sollte funktionieren.

+0

, wenn ich AlarmTime als: Std :: String alarmTime = "08:52:00"; Ich bekomme einen Fehler: "'String' in Namespace 'Std' keinen Namen nennen" –

+1

Versuchen Sie den geänderten Code –

+0

Wenn es funktioniert, bitte akzeptieren Sie die Antwort; D –

1

Sie versuchen, zwei verschiedene Dinge mit verwirrend ähnlichen Namen zu vergleichen. A string (C-Stil-String) ist ein null-terminiertes Char-Array. Dies unterscheidet sich von der String object. Es ist allgemein anerkannt, dass bei extrem speicherbegrenzter Hardware, wie z. B. den Standard-Arduino-Boards, die Verwendung der String-Klasse möglichst vermieden werden sollte, da sie mehr Speicher benötigt und Speicherfragmentierung durch dynamische Speicherzuweisung verursachen kann. Es ist viel besser, stattdessen Strings zu verwenden, mit denen man eigentlich genauso gut arbeiten kann wie mit String.

Ihr Code nur Strings:

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

void loop() { 
    if (strcmp(rtc.getTimeStr(), alarmTime) == 0) { 
    alarmState = true; 
    } 
} 
Verwandte Themen