1

我正在制作一个涉及 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.

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

4

2 回答 2

1

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

如果您检查RTClib.hDateTime ,您会发现所有 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 后的一分钟内运行时,此检查都会成功。

于 2016-05-10T02:12:49.090 回答
0

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

你的意思不是这样的吗?

if (now == "19:10") {
于 2016-05-10T01:41:46.923 回答