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
Time Arduino定时报警器有时不工作_Time_Arduino_Real Time Clock - Fatal编程技术网

Time Arduino定时报警器有时不工作

Time Arduino定时报警器有时不工作,time,arduino,real-time-clock,Time,Arduino,Real Time Clock,我使用一个Arduino Mega兼容板(SainSmart Mega 2560 R3 ATmega2560-16AU),该板附带一个rtc模块(v1.1 ds1307rtc),并使用附带的代码对其进行操作。我使用TimeAlarms库(从下载)每小时都有一个闹钟。警报应在每小时不同的分钟出现,但为了测试,我已将它们全部设置为12分钟。 这段代码正在等待一个正确的时间,我可以通过usb,串行接口设置。代码在大多数情况下运行良好。但有时警报没有激活,我的指示灯也没有闪烁。我不知道为什么会发生这种情

我使用一个Arduino Mega兼容板(SainSmart Mega 2560 R3 ATmega2560-16AU),该板附带一个rtc模块(v1.1 ds1307rtc),并使用附带的代码对其进行操作。我使用TimeAlarms库(从下载)每小时都有一个闹钟。警报应在每小时不同的分钟出现,但为了测试,我已将它们全部设置为12分钟。 这段代码正在等待一个正确的时间,我可以通过usb,串行接口设置。代码在大多数情况下运行良好。但有时警报没有激活,我的指示灯也没有闪烁。我不知道为什么会发生这种情况,也不知道什么时候发生这种情况,我没有在工作闪烁和不工作之间做任何改变。此外,我看不到任何时间它工作不正常,因为它工作正常,但有时会失败。如果出现故障,则故障小时后的所有小时似乎都在故障中,并且不会触发报警。 我知道TimeAlarms.h中有6个报警的限制,并将此文件中的变量dtNBR_alarms设置为25

正如您所见,我已经实现了一个printTime函数,它可以打印出rtc和系统时间,并且始终都是正确的

有人知道我做错了什么,或者为什么有时候会失败吗

#include <Time.h>
#include <TimeAlarms.h>
#include <Wire.h>
#include <DS1307RTC.h>

tmElements_t tm;

int pwm_2 = 2;
int pwm_3 = 3;
int pwm_4 = 4;
int pwm_5 = 5;
int pwm_6 = 6;
int pwm_7 = 7;
int pwm_8 = 8;
int pwm_9 = 9;
int pwm_10 = 10;
int pwm_11 = 11;
int pwm_12 = 12;
int pwm_13 = 13;
//delay in the for loops
int dly = 120;

// the setup routine runs once when you press reset:
void setup()  { 
  Serial.begin(9600);
  while (!Serial) ; // wait for serial
  setSyncProvider(RTC.get);   // the function to get the time from the RTC
  RTC.read(tm);
  setTime(tm.Hour,tm.Minute,tm.Second,tm.Day,tm.Month,tm.Year);
  printTime();

  //wait for time input via serial, time must be set at every system boot
  while(tmYearToCalendar(tm.Year) < 2014) {
    Serial.println("wait in time loop, you have to set a time, current time is not correct:");
    printTime();
    if (Serial.available()) {
      time_t t = processSyncMessage();
      Serial.println("wait in time loop");
      if (t != 0) {
        RTC.set(t);   // set the RTC and the system time to the received value
        setTime(t); 
        Serial.println("time is succesfully set to");
        printTime(); 
        break;        
      }
    }
    delay(1000);
  }
  Serial.println("Time is already set to:");
  printTime();

  //set alarms for all hours in UTC, not in CET
  Alarm.alarmRepeat(0, 12, 0, shotAlarm);
  Alarm.alarmRepeat(1, 12, 0, shotAlarm);
  Alarm.alarmRepeat(2, 12, 0, shotAlarm);
  Alarm.alarmRepeat(3, 12, 0, shotAlarm);
  Alarm.alarmRepeat(4, 12, 0, shotAlarm);
  Alarm.alarmRepeat(5, 12, 0, shotAlarm);
  Alarm.alarmRepeat(6, 12, 0, shotAlarm);
  Alarm.alarmRepeat(7, 12, 0, shotAlarm);
  Alarm.alarmRepeat(8, 12, 0, shotAlarm);
  Alarm.alarmRepeat(9, 12, 0, shotAlarm);
  Alarm.alarmRepeat(10, 12, 0, shotAlarm);
  Alarm.alarmRepeat(11, 12, 0, shotAlarm);
  Alarm.alarmRepeat(12, 12, 0, shotAlarm);
  Alarm.alarmRepeat(13, 12, 0, shotAlarm);
  Alarm.alarmRepeat(14, 12, 0, shotAlarm);
  Alarm.alarmRepeat(15, 12, 0, shotAlarm);
  Alarm.alarmRepeat(16, 12, 0, shotAlarm);
  Alarm.alarmRepeat(17, 12, 0, shotAlarm);
  Alarm.alarmRepeat(18, 12, 0, shotAlarm);
  Alarm.alarmRepeat(19, 12, 0, shotAlarm);
  Alarm.alarmRepeat(20, 12, 0, shotAlarm);
  Alarm.alarmRepeat(21, 12, 0, shotAlarm);
  Alarm.alarmRepeat(22, 12, 0, shotAlarm);
  Alarm.alarmRepeat(23, 12, 0, shotAlarm);

  // declare pin 2-13 to be an output:
  pinMode(pwm_2, OUTPUT); //red
  pinMode(pwm_3, OUTPUT); //blue
  pinMode(pwm_4, OUTPUT); //green
  pinMode(pwm_5, OUTPUT);  //red
  pinMode(pwm_6, OUTPUT); //blue
  pinMode(pwm_7, OUTPUT);  //green
  pinMode(pwm_8, OUTPUT);  //red
  pinMode(pwm_9, OUTPUT); //blue
  pinMode(pwm_10, OUTPUT);  //green
  pinMode(pwm_11, OUTPUT); //red
  pinMode(pwm_12, OUTPUT);  //blue
  pinMode(pwm_13, OUTPUT);  //green  
} 

void shotAlarm() {
  Serial.println("SHOTALARM");
  analogWrite(pwm_2, 255);
  analogWrite(pwm_5, 255);
  analogWrite(pwm_8, 255);
  analogWrite(pwm_11, 255);
  analogWrite(pwm_3, 255); 
  analogWrite(pwm_4, 255); 
  analogWrite(pwm_6, 255); 
  analogWrite(pwm_7, 255); 
  analogWrite(pwm_9, 255);
  analogWrite(pwm_10, 255); 
  analogWrite(pwm_12, 255); 
  analogWrite(pwm_13, 255); 
  for(int a = 0; a < 60; a = a+1) {
    for (int i = 0; i < 255; i = i + 1) {
      analogWrite(pwm_2, i); //red
      analogWrite(pwm_5, i); //red
      analogWrite(pwm_8, i); //red
      analogWrite(pwm_11, i); //red
      delay (5);
    }
    for (int i = 255; i > 0; i = i - 1) {
      analogWrite(pwm_2, i); //red
      analogWrite(pwm_5, i); //red
      analogWrite(pwm_8, i); //red
      analogWrite(pwm_11, i); //red
      delay (5);
    }
  }
}
void loop() {
  Alarm.delay(0);
  Serial.println("new loop");
  printTime();
  analogWrite(pwm_2, 0);
  analogWrite(pwm_5, 0);
  analogWrite(pwm_8, 0);
  analogWrite(pwm_11, 0);
  analogWrite(pwm_3, 255); 
  analogWrite(pwm_4, 255); 
  analogWrite(pwm_6, 255); 
  analogWrite(pwm_7, 255); 
  analogWrite(pwm_9, 255);
  analogWrite(pwm_10, 255); 
  analogWrite(pwm_12, 255); 
  analogWrite(pwm_13, 255); 
  for (int i = 255; i > 0; i = i - 1) {
    analogWrite(pwm_4, i); //green
    analogWrite(pwm_7, i); //green
    analogWrite(pwm_10, i); //green
    analogWrite(pwm_13, i); //green  
    Alarm.delay (dly);
  }
  for (int i = 0; i < 255; i = i + 1) {
    analogWrite(pwm_2, i); //red
    analogWrite(pwm_5, i); //red
    analogWrite(pwm_8, i); //red
    analogWrite(pwm_11, i); //red
    Alarm.delay (dly);
  } 
  for (int i = 255; i > 0; i = i - 1) {
    analogWrite(pwm_3, i); //blue
    analogWrite(pwm_6, i); //blue
    analogWrite(pwm_9, i); //blue
    analogWrite(pwm_12, i); //blue      
    Alarm.delay (dly);
  }
  for (int i = 0; i < 255; i = i + 1) {
    analogWrite(pwm_4, i); //green
    analogWrite(pwm_7, i); //green
    analogWrite(pwm_10, i); //green
    analogWrite(pwm_13, i); //green  
    Alarm.delay (dly);
  }  
  for (int i = 255; i > 0; i = i - 1) {
    analogWrite(pwm_2, i); //red
    analogWrite(pwm_5, i); //red
    analogWrite(pwm_8, i); //red
    analogWrite(pwm_11, i); //red
    Alarm.delay (dly);
  }
  for (int i = 0; i < 255; i = i + 1) {
    analogWrite(pwm_3, i); //blue
    analogWrite(pwm_6, i); //blue
    analogWrite(pwm_9, i); //blue
    analogWrite(pwm_12, i); //blue 
    Alarm.delay (dly);
  }
  Alarm.delay(0);
}

void printTime() {
  if (RTC.read(tm)) {
    Serial.print("Ok, RTC Time = ");
    print2digits(tm.Hour);
    Serial.write(':');
    print2digits(tm.Minute);
    Serial.write(':');
    print2digits(tm.Second);
    Serial.print(", Date (D/M/Y) = ");
    Serial.print(tm.Day);
    Serial.write('/');
    Serial.print(tm.Month);
    Serial.write('/');
    Serial.print(tmYearToCalendar(tm.Year));
    Serial.println();
  } 
  else {
    if (RTC.chipPresent()) {
      Serial.println("The DS1307 is stopped.  Please run the SetTime");
      Serial.println("example to initialize the time and begin running.");
      Serial.println();
    } 
    else {
      Serial.println("DS1307 read error!  Please check the circuitry.");
      Serial.println();
    }
  }
  Serial.print("Ok, System Time = ");
  print2digits(hour());
  Serial.write(':');
  print2digits(minute());
  Serial.write(':');
  print2digits(second());
  Serial.print(", Date (D/M/Y) = ");
  Serial.print(day());
  Serial.write('/');
  Serial.print(month());
  Serial.write('/');
  Serial.print(year());
  Serial.println();
}
void print2digits(int number) {
  if (number >= 0 && number < 10) {
    Serial.write('0');
  }
  Serial.print(number);
}
/*  code to process time sync messages from the serial port   */
#define TIME_HEADER  "T"   // Header tag for serial time sync message
unsigned long processSyncMessage() {
  unsigned long pctime = 0L;
  const unsigned long DEFAULT_TIME = 1357041600; // Jan 1 2013 

  if(Serial.find(TIME_HEADER)) {
    pctime = Serial.parseInt();
    return pctime;
    if( pctime < DEFAULT_TIME) { // check the value is a valid time (greater than Jan 1 2013)
      pctime = 0L; // return 0 to indicate that the time is not valid
    }
  }
  return pctime;
}
#包括
#包括
#包括
#包括
TMU\t tm;
int-pwm_2=2;
int pwm_3=3;
int pwm_4=4;
int pwm_5=5;
int pwm_6=6;
int pwm_7=7;
int pwm_8=8;
int pwm_9=9;
int pwm_10=10;
int-pwm_11=11;
int pwm_12=12;
int pwm_13=13;
//for循环中的延迟
int=120;
//按“重置”时,设置例程运行一次:
无效设置(){
Serial.begin(9600);
while(!Serial);//等待Serial
setSyncProvider(RTC.get);//从RTC获取时间的函数
RTC.read(tm);
设定时间(标准时、标准分、标准秒、标准日、标准月、标准年);
打印时间();
//通过串行方式等待时间输入,每次系统启动时必须设置时间
而(tm年至日历年(tm年)<2014年){
println(“在时间循环中等待,您必须设置时间,当前时间不正确:”;
打印时间();
if(Serial.available()){
time_t t=processSyncMessage();
Serial.println(“等待时间循环”);
如果(t!=0){
set(t);//将RTC和系统时间设置为接收值
设定时间(t);
Serial.println(“时间成功设置为”);
打印时间();
打破
}
}
延迟(1000);
}
Serial.println(“时间已设置为:”);
打印时间();
//以UTC而非CET设置所有小时的警报
报警。报警重复(0,12,0,报警);
报警。报警重复(1、12、0、报警);
报警。报警重复(2,12,0,报警);
报警。报警重复(3,12,0,报警);
报警。报警重复(4、12、0、报警);
报警。报警重复(5,12,0,报警);
报警。报警重复(6,12,0,报警);
报警。报警重复(7、12、0、报警);
报警。报警重复(8、12、0、报警);
报警。报警重复(9,12,0,报警);
报警。报警重复(10、12、0、报警);
Alarm.alarmRepeat(11、12、0、shotAlarm);
报警。报警重复(12,12,0,报警);
报警。报警重复(13、12、0、报警);
报警。报警重复(14、12、0、报警);
报警。报警重复(15、12、0、报警);
报警。报警重复(16、12、0、报警);
报警。报警重复(17、12、0、报警);
报警。报警重复(18,12,0,报警);
Alarm.alarmRepeat(19、12、0、shotAlarm);
报警。报警重复(20、12、0、报警);
报警。报警重复(21、12、0、报警);
报警。报警重复(22,12,0,报警);
Alarm.alarmRepeat(23、12、0、shotAlarm);
//将引脚2-13声明为输出:
引脚模式(pwm_2,输出);//红色
引脚模式(pwm_3,输出);//蓝色
引脚模式(pwm_4,输出);//绿色
引脚模式(pwm_5,输出);//红色
引脚模式(pwm_6,输出);//蓝色
引脚模式(pwm_7,输出);//绿色
引脚模式(pwm_8,输出);//红色
引脚模式(pwm_9,输出);//蓝色
引脚模式(pwm_10,输出);//绿色
引脚模式(pwm_11,输出);//红色
引脚模式(pwm_12,输出);//蓝色
引脚模式(pwm_13,输出);//绿色
} 
void shotAlarm(){
Serial.println(“SHOTALARM”);
模拟写入(pwm_2,255);
模拟写入(pwm_5,255);
模拟写入(pwm_8,255);
模拟写入(pwm_11,255);
模拟写入(pwm_3,255);
模拟写入(pwm_4,255);
模拟写入(pwm_6,255);
模拟写入(pwm_7,255);
模拟写入(pwm_9,255);
模拟写入(pwm_10,255);
模拟写入(pwm_12,255);
模拟写入(pwm_13255);
对于(int a=0;a<60;a=a+1){
对于(int i=0;i<255;i=i+1){
模拟写入(pwm_2,i);//红色
模拟写入(pwm_5,i);//红色
模拟写入(pwm_8,i);//红色
模拟写入(pwm_11,i);//红色
延误(5);
}
对于(int i=255;i>0;i=i-1){
模拟写入(pwm_2,i);//红色
模拟写入(pwm_5,i);//红色
模拟写入(pwm_8,i);//红色
模拟写入(pwm_11,i);//红色
延误(5);
}
}
}
void循环(){
报警延时(0);
Serial.println(“新循环”);
打印时间();
模拟写入(pwm_2,0);
模拟写入(pwm_5,0);
模拟写入(pwm_8,0);
模拟写入(pwm_11,0);
模拟写入(pwm_3,255);
模拟写入(pwm_4,255);
模拟写入(pwm_6,255);
模拟写入(pwm_7,255);
模拟写入(pwm_9,255);
模拟写入(pwm_10,255);
模拟写入(pwm_12,255);
模拟写入(pwm_13255);
对于(int i=255;i>0;i=i-1){
模拟写入(pwm_4,i);//绿色
模拟写入(pwm_7,i);//绿色
模拟写入(pwm_10,i);//绿色
模拟写入(pwm_13,i);//绿色
报警延迟(dly);
}
对于(int i=0;i<255;i=i+1){
模拟写入(pwm_2,i);//红色
模拟写入(pwm_5,i);//红色
模拟写入(pwm_8,i);//红色
模拟写入(pwm_11,i);//红色
报警延迟(dly);
} 
对于(int i=255;i>0;i=i-1){
模拟写入(pwm_3,i);//蓝色
模拟写入(pwm_6,i);//蓝色
模拟写入(pwm_9,i);//蓝色
模拟写入(pwm_12,i);//蓝色
报警延迟(dly);
}
对于(int i=0;i<255;i=i+1){
模拟写入(pwm_4,i);//绿色
模拟写入(pwm_7,i);//gr
setTime(tm.Hour,tm.Minute,tm.Second,tm.Day,tm.Month,tm.Year);
setTime(tm.Hour,tm.Minute,tm.Second,tm.Day,tm.Month,tmYearToCalendar(tm.Year));