2016-05-10 14 views
1

Ich mache ein Projekt, das eine RTC und einen Servomotor beinhaltet, so dass es nur zu einer bestimmten Zeit einschaltet. Ein Ausschnitt aus der Schleife ist:Arduino mit Servo und RTC

void loop() { 
    DateTime now = rtc.now(); 
    if (DateTime == 19:10) { 
     //Some stuff 
    } else { 
     return(); 
    } 
} 

und mein Fehler ist:

Arduino: 1.6.8 (Windows 10), Board: "Arduino/Genuino Uno" 

C:\Users\User\Documents\Arduino\Servo_motor\Servo_motor.ino: In function 'void loop()': 

Servo_motor:36: error: expected primary-expression before '==' token 

    if (DateTime == 19:10) { 

      ^

Servo_motor:36: error: expected ')' before ':' token 

    if (DateTime == 19:10) { 

        ^

Servo_motor:45: error: expected primary-expression before '}' token 

    } 

^

Servo_motor:45: error: return-statement with a value, in function returning 'void' [-fpermissive] 

Servo_motor:45: error: expected ';' before '}' token 

Multiple libraries were found for "RTClib.h" 
Used: C:\Program Files (x86)\Arduino\libraries\RTClib 
Not used: C:\Users\User\Documents\Arduino\libraries\arduino_786051 
exit status 1 
expected primary-expression before '==' token 

This report would have more information with 
"Show verbose output during compilation" 
option enabled in File -> Preferences. 

Ich bin wirklich verwirrt. Kann mir bitte jemand helfen?

Antwort

1

Ich werde Sie verwenden die Adafruit RTClib here sich zu übernehmen, da dies wahrscheinlich derjenige zugänglich von der IDE ist, oder dass ein Tutorial verwenden. Es ist auch eine Gabelung der anderen verfügbaren RTClib, so dass diese Antwort wahrscheinlich für beide gilt. Wenn Sie RTClib.h überprüfen, finden Sie die öffentlich verfügbaren Methoden für DateTime und alle RTC-Klassen. Wenn Sie dies tun, werden Sie bemerken, dass es keine operator== Methode gibt, und im Allgemeinen bedeutet dies, dass Sie das nicht als eine Form des Vergleichs verwenden können. Um das zu tun, was Sie wollen, müssen Sie DateTime.minute() und DateTime.hour() verwenden und diese separat vergleichen In Ihrem Loopblock würde es wie folgt aussehen: Aber

void loop() { 
    DateTime now = rtc.now(); 
    if (now.hour() == 19 && now.minute() == 10) { 
     //Some stuff 
    } else { 
     return; 
    } 
} 

, diese die Möglichkeit hat, den Code in Frage schon ein paar Mal laufen, wie diese Überprüfung in der Minute jedes Mal gelingen wird, die Schleife läuft nach dem RTC ticket um 19:10.

0

Es scheint, dass Sie den Typ mit einer Konstante vergleichen (Zeit ohne Anführungszeichen).

Meinst du nicht so etwas?

if (now == "19:10") {