Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RTC&x2B;使用Arduino mini的调度器_Arduino_Scheduler_Real Time Clock - Fatal编程技术网

RTC&x2B;使用Arduino mini的调度器

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

我的项目使用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.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