RTC&x2B;使用Arduino mini的调度器
我的项目使用Arduino mini 5V和RTC实时时钟模块DS1307 我想在某个时间唤醒电路板并运行一个函数。(蜂鸣器连接到D3) 当我单独使用TimeAlarm并手动设置时间时,一切正常:RTC&x2B;使用Arduino mini的调度器,arduino,scheduler,real-time-clock,Arduino,Scheduler,Real Time Clock,我的项目使用Arduino mini 5V和RTC实时时钟模块DS1307 我想在某个时间唤醒电路板并运行一个函数。(蜂鸣器连接到D3) 当我单独使用TimeAlarm并手动设置时间时,一切正常: #include "Time.h" #include "TimeAlarms.h" void setup(){ setTime(22,29,55,12,31,14); // set time to Saturday 8:29:00am Jan 1 2011 Alarm.alarmRepea
#include "Time.h"
#include "TimeAlarms.h"
void setup(){
setTime(22,29,55,12,31,14); // set time to Saturday 8:29:00am Jan 1 2011
Alarm.alarmRepeat(10,30,0,buzz); // 10:30am every day
Alarm.alarmRepeat(16,30,0,buzz); // 4:30pm every day
Alarm.alarmRepeat(22,30,0,buzz); // 10:30pm every day
Serial.begin(9600);
}
void loop(){
digitalClockDisplay();
Alarm.delay(1000);
}
void buzz(){
tone(3, 220, 1000);
}
void digitalClockDisplay(){
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.println();
}
void printDigits(int digits){
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}
#包括“Time.h”
#包括“TimeAlarms.h”
无效设置(){
设定时间(22,29,55,12,31,14);//设定时间为2011年1月1日星期六上午8:29:00
Alarm.alarmRepeat(10,30,0,嗡嗡声);//每天上午10:30
Alarm.alarmRepeat(16,30,0,嗡嗡声);//每天下午4:30
Alarm.alarmRepeat(22,30,0,嗡嗡声);//每天晚上10:30
Serial.begin(9600);
}
void循环(){
数字时钟显示器();
报警延时(1000);
}
void buzz(){
音调(3、220、1000);
}
void digitalClockDisplay(){
//数字时钟显示时间
Serial.print(hour());
打印数字(分钟();
打印数字(第二个());
Serial.println();
}
无效打印位数(整数位数){
连续打印(“:”);
如果(数字<10)
Serial.print('0');
串行打印(数字);
}
然而,当我使用RTC时,蜂鸣器功能不会被调用,它仍然会打印时间
#include <Wire.h>
#include "RTClib.h"
#include "Time.h"
#include "TimeAlarms.h"
RTC_Millis rtc;
void setup(){
rtc.begin(DateTime(F(__DATE__), F(__TIME__)));
Alarm.alarmRepeat(10,30,0,buzz); // 10:30am every day
Alarm.alarmRepeat(16,30,0,buzz); // 4:30pm every day
Alarm.alarmRepeat(22,30,0,buzz); // 10:30pm every day -- modify this to your current time when running the example
Serial.begin(9600);
}
void loop(){
//printing the current time
DateTime now = rtc.now();
Serial.print(now.year());
Serial.print('/');
Serial.print(now.month());
Serial.print('/');
Serial.print(now.day());
Serial.print(' ');
Serial.print(now.hour());
Serial.print(':');
Serial.print(now.minute());
Serial.print(':');
Serial.print(now.second());
Serial.println();
Alarm.delay(1000); // wait one second between clock display
}
void buzz(){
tone(3, 220, 1000);
}
#包括
#包括“RTClib.h”
#包括“Time.h”
#包括“TimeAlarms.h”
RTC_Millis RTC;
无效设置(){
rtc.begin(日期时间(F(uu日期),F(u时间));
Alarm.alarmRepeat(10,30,0,嗡嗡声);//每天上午10:30
Alarm.alarmRepeat(16,30,0,嗡嗡声);//每天下午4:30
Alarm.alarmRepeat(22,30,0,buzz);//每天晚上10:30——运行示例时将其修改为当前时间
Serial.begin(9600);
}
void循环(){
//打印当前时间
DateTime now=rtc.now();
Serial.print(now.year());
序列号。打印(“/”);
Serial.print(now.month());
序列号。打印(“/”);
Serial.print(now.day());
序列号。打印(“”);
Serial.print(now.hour());
序列号。打印(“:”);
Serial.print(now.minute());
序列号。打印(“:”);
Serial.print(现在是.second());
Serial.println();
闹钟。延迟(1000);//在时钟显示之间等待一秒钟
}
void buzz(){
音调(3、220、1000);
}
好的,我找到了答案:
第一个问题是:使用RTC_DS1307而不是RTC_Millis
RTC ds1307指的是针脚12C,在Arduino mini中,针脚12C高于A3和VCC。它们需要焊接。完成后,应使用M/F线将其连接至SDA和SCL
SDA -> to the pin above A3
SCL -> to the pin above VCC
然后我将代码更改为以下内容:
#include <Wire.h>
#include "RTClib.h"
#include "Time.h"
#include "TimeAlarms.h"
RTC_DS1307 rtc;
const int output = 3;
uint32_t syncProvider()//function which sets up the RTC as the source of external time{
return rtc.now().unixtime();
}
void setup(){
Wire.begin();
rtc.begin();
rtc.adjust(DateTime(__DATE__, __TIME__));//comment this out when the RTC has been set
setSyncProvider(syncProvider); // the function to get the time from the RTC
Alarm.alarmRepeat(10,30,0,buzzer); // 10:30am every day
Alarm.alarmRepeat(16,30,0,buzzer); // 4:30pm every day
Alarm.alarmRepeat(22,30,00,buzzer); // 10:30pm every day
pinMode(output , OUTPUT);//new line
Serial.begin(9600);
}
void loop(){
//printing the current time
DateTime now = rtc.now();
Serial.print(now.year());
Serial.print('/');
Serial.print(now.month());
Serial.print('/');
Serial.print(now.day());
Serial.print(' ');
Serial.print(now.hour());
Serial.print(':');
Serial.print(now.minute());
Serial.print(':');
Serial.print(now.second());
Serial.println();
Alarm.delay(1000); // wait one second between clock display
}
void buzzer(){
//Do Stuff
}
#包括
#包括“RTClib.h”
#包括“Time.h”
#包括“TimeAlarms.h”
RTC_DS1307 RTC;
常量int输出=3;
uint32\u t syncProvider()//将RTC设置为外部时间源的函数{
返回rtc.now().unixtime();
}
无效设置(){
Wire.begin();
rtc.begin();
adjust(DateTime(_DATE_uuu,_TIME_uu));//在设置rtc时注释掉这个
setSyncProvider(syncProvider);//从RTC获取时间的函数
报警。报警重复(10,30,0,蜂鸣器);//每天上午10:30
报警。报警重复(16,30,0,蜂鸣器);//每天下午4:30
报警。报警重复(22,30,00,蜂鸣器);//每天晚上10:30
pinMode(输出,输出);//新行
Serial.begin(9600);
}
void循环(){
//打印当前时间
DateTime now=rtc.now();
Serial.print(now.year());
序列号。打印(“/”);
Serial.print(now.month());
序列号。打印(“/”);
Serial.print(now.day());
序列号。打印(“”);
Serial.print(now.hour());
序列号。打印(“:”);
Serial.print(now.minute());
序列号。打印(“:”);
Serial.print(现在是.second());
Serial.println();
闹钟。延迟(1000);//在时钟显示之间等待一秒钟
}
无效蜂鸣器(){
//做事
}
只是为了帮助像我这样的noob,他使用复制粘贴和获取错误尝试了这段代码
已命名的返回值不再受支持。编译错误
在网上搜索后发现,{这个臭名昭著的花括号是评论的一部分,所以请将其更改为
uint32_t syncProvider() { //function which sets up the RTC as the source of external time
return rtc . now() . unixtime();
}
我可能是错的,但我在下面的代码段中没有看到任何对蜂鸣器的引用…出于隐私原因,我不得不在这里编辑这个示例。所以现在我在这里更正了它。谢谢你提到这一点!你能让匿名简化版本运行吗?上面的代码应该运行,振动电机连接到引脚D3