带伺服和 RTC 的 Arduino

Arduino with servo and RTC

我正在做一个涉及 RTC 和伺服电机的项目,以便它只在特定时间打开。循环中的一个片段是:

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

我的错误是:

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.

我真的很困惑。有人可以帮忙吗?

您似乎是在将类型与常量(不带引号的时间)进行比较。

你不是这个意思吗?

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

我假设您正在使用位于 here 的 Adafruit RTClib,因为这可能是可以从 IDE 访问的,或者教程将使用的。它也是其他可用 RTClib 的分支,因此这个答案可能与两者都有关。

如果您选中 RTClib.h,您将找到 DateTime 和所有 RTC 类 的公开可用方法。如果这样做,您会注意到没有 operator== 方法,通常这意味着您不能将其用作比较形式。

为了做你想做的,你需要使用DateTime.minute()DateTime.hour()并分别比较它们。在您的循环块中,它将如下所示:

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

但是,这有可能 运行 有问题的代码多次,因为每次在 RTC 滴答到 19:10 之后的分钟内循环运行时,此检查都会成功.