带伺服和 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 之后的分钟内循环运行时,此检查都会成功.
我正在做一个涉及 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 之后的分钟内循环运行时,此检查都会成功.