I use timealarms to control led light (42w). I use 17 alarm.Repeat per day.
In test mode(1minute) everything works fine, but in 24h cycle it stops working correctly.
To avoid power failure problems is after every hour alarm.Repeat digitalWrite(HIGH) or LOW for relays.
I think this is problem.
#include <DS1307RTC.h>
#include <Time.h>
#include <TimeAlarms.h> // accepts 23 alarmRepeat
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int MW = 6; //leds power supply (relay on / off)
const int W = 9; //white led (relay ON /off)
const int BLUE = 10; //blue led PWM module (PWM or withoutPWM 100%)
LiquidCrystal_I2C lcd(0x27,16,2);
void setup()
{
Serial.begin(9600);
//setTime(9,29,55,12,30,12); // TEST
setSyncProvider(RTC.get); // the function to get the time from the RTC
if(timeStatus()!= timeSet)
Serial.println("Unable to sync with the RTC");
else
Serial.println("RTC has set the system time");
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.setCursor(0, 1);
lcd.print("RESTART");
pinMode (MW, OUTPUT);
pinMode (W, OUTPUT);
pinMode (BLUE, OUTPUT);
digitalWrite(MW, HIGH); //power supply OFF
digitalWrite(W, HIGH); //white leds OFF
// ***** TEST ****
/*
Alarm.alarmRepeat(9,30,00, H06M30);
Alarm.alarmRepeat(9,30,05, H07M30);
Alarm.alarmRepeat(9,30,10, H08M30);
Alarm.alarmRepeat(9,30,15, H10M30);
Alarm.alarmRepeat(9,30,20, H10M30);
Alarm.alarmRepeat(9,30,25, H11M30);
Alarm.alarmRepeat(9,30,30, H12M30);
Alarm.alarmRepeat(9,30,35, H13M30);
Alarm.alarmRepeat(9,30,40, H14M30);
Alarm.alarmRepeat(9,30,44, H15M30);
Alarm.alarmRepeat(9,30,50, H16M30);
Alarm.alarmRepeat(9,30,55, H17M30);
Alarm.alarmRepeat(9,31,05, H18M30);
Alarm.alarmRepeat(9,31,10, H19M30);
Alarm.alarmRepeat(9,31,15, H20M30);
Alarm.alarmRepeat(9,31,20, H21M30);
Alarm.alarmRepeat(9,31,25, H22M30);
Alarm.alarmRepeat(9,31,30, H23M30);
*/
///LED control times
Alarm.alarmRepeat(6,30,00, H06M30);
Alarm.alarmRepeat(7,30,05, H07M30);
Alarm.alarmRepeat(8,30,10, H08M30);
Alarm.alarmRepeat(9,30,15, H09M30);
Alarm.alarmRepeat(10,30,20, H10M30);
Alarm.alarmRepeat(11,30,25, H11M30);
Alarm.alarmRepeat(12,30,30, H12M30);
Alarm.alarmRepeat(13,30,35, H13M30);
Alarm.alarmRepeat(14,30,40, H14M30);
Alarm.alarmRepeat(15,30,44, H15M30);
Alarm.alarmRepeat(16,30,50, H16M30);
Alarm.alarmRepeat(17,30,55, H17M30);
Alarm.alarmRepeat(18,31,05, H18M30);
Alarm.alarmRepeat(19,31,10, H19M30);
Alarm.alarmRepeat(20,31,15, H20M30);
Alarm.alarmRepeat(21,31,20, H21M30);
Alarm.alarmRepeat(22,31,25, H22M30);
Alarm.alarmRepeat(23,31,30, H23M30);
}
void loop() {
digitalClockDisplay();
Alarm.delay(1000);
}
void H06M30() {
Serial.println("BLUE 33% WHITE 00% POWER ON");
lcd.setCursor(0, 1);
lcd.print("B33% W00% P ON ");
analogWrite(BLUE, 84); // blue leds 33%
digitalWrite(MW, LOW); // power supply ON
digitalWrite(W, HIGH); // white leds OFF
}
void H07M30() {
Serial.println("BLUE 33% WHITE 00% POWER ON");
lcd.setCursor(0, 1);
lcd.print("B33% W00% M ON ");
analogWrite(BLUE, 84);
digitalWrite(MW, LOW);
digitalWrite(W, HIGH);
}
void H08M30() {
Serial.println("BLUE 66% WHITE 00% POWER ON");
lcd.setCursor(0, 1);
lcd.print("B66% W00% M ON ");
analogWrite(BLUE, 168);
digitalWrite(MW, LOW);
digitalWrite(W, HIGH);
}
void H09M30() {
Serial.println("BLUE 100% WHITE OFF POWER ON");
lcd.setCursor(0, 1);
lcd.print("B100% W00% M ON ");
analogWrite(BLUE, 255);
digitalWrite(MW, LOW);
digitalWrite(W, HIGH);
}
void H10M30() {
Serial.println("BLUE 100% WHITE OFF POWER ON");
lcd.setCursor(0, 1);
lcd.print("B100% W00% M ON ");
analogWrite(BLUE, 255);
digitalWrite(MW, LOW);
digitalWrite(W, HIGH);
}
void H11M30() {
Serial.println("BLUE 100% WHITE ON POWER ON ");
lcd.setCursor(0, 1);
lcd.print("B100% W100% M ON ");
analogWrite(BLUE, 255);
digitalWrite(MW, LOW);
digitalWrite(W, LOW); // white leds on
}
void H12M30() {
Serial.println("BLUE 100% WHITE ON POWER ON");
lcd.setCursor(0, 1);
lcd.print("B100% W100% M ON ");
analogWrite(BLUE, 255);
digitalWrite(MW, LOW);
digitalWrite(W, LOW);
}
void H13M30() {
Serial.println("BLUE 100% WHITE ON POWER ON");
lcd.setCursor(0, 1);
lcd.print("B100% W100% M ON ");
analogWrite(BLUE, 255);
digitalWrite(MW, LOW);
digitalWrite(W, LOW);
}
void H14M30() {
Serial.println("BLUE 100% WHITE ON POWER ON");
lcd.setCursor(0, 1);
lcd.print("B100% W100% M ON ");
analogWrite(BLUE, 255);
digitalWrite(MW, LOW);
digitalWrite(W, LOW);
}
void H15M30() {
Serial.println("BLUE 100% WHITE ON POWER ON");
lcd.setCursor(0, 1);
lcd.print("B100% W100% M ON ");
analogWrite(BLUE, 255);
digitalWrite(MW, LOW);
digitalWrite(W, LOW);
}
void H16M30() {
Serial.println("BLUE 100% WHITE ON POWER ON");
lcd.setCursor(0, 1);
lcd.print("B100% W100% M ON ");
analogWrite(BLUE, 255);
digitalWrite(MW, LOW);
digitalWrite(W, LOW);
}
void H17M30() {
Serial.println("BLUE 100% WHITE ON POWER ON");
lcd.setCursor(0, 1);
lcd.print("B100% W100% M ON ");
digitalWrite(MW, LOW);
digitalWrite(W, LOW);
}
void H18M30() {
Serial.println("BLUE 100% WHITE ON POWER ON");
lcd.setCursor(0, 1);
lcd.print("B100% W100% M ON ");
analogWrite(BLUE, 255);
digitalWrite(MW, LOW);
digitalWrite(W, LOW);
}
void H19M30() {
Serial.println("BLUE 100% WHITE OFF POWER ON");
lcd.setCursor(0, 1);
lcd.print("B100% W00% M ON ");
analogWrite(BLUE, 255);
digitalWrite(MW, LOW);
digitalWrite(W, HIGH); //white leds OFF
}
void H20M30() {
Serial.println("BLUE 66% WHITE OFF POWER ON");
lcd.setCursor(0, 1);
lcd.print("B66% W00% M ON ");
analogWrite(BLUE, 168);
digitalWrite(MW, LOW);
digitalWrite(W, HIGH);
}
void H21M30() {
Serial.println("BLUE 33% WHITE OFF POWER ON");
lcd.setCursor(0, 1);
lcd.print("B33% W00% M ON ");
analogWrite(BLUE, 84);
digitalWrite(MW, LOW);
digitalWrite(W, HIGH);
}
void H22M30() {
Serial.println("BLUE 33% WHITE OFF POWER ON");
lcd.setCursor(0, 1);
lcd.print("BS33% W00% M ON ");
analogWrite(BLUE, 84);
digitalWrite(MW, LOW);
digitalWrite(W, HIGH);
}
void H23M30() {
Serial.println("BLUE OFF WHITE OFF POWER OFF");
lcd.setCursor(0, 1);
lcd.print("....GOOD BYE....");
digitalWrite(BLUE, LOW); // blue OFF
digitalWrite(MW, HIGH); // power supply OFF
digitalWrite(W, HIGH); // white leds OFF
}
void digitalClockDisplay()
{
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.println();
lcd.setCursor(0, 0);
lcd.print(hour());
LCDprintDigits(minute());
LCDprintDigits(second());
}
void printDigits(int digits)
{
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}
void LCDprintDigits(int LCDdigits)
{
lcd.print(":");
if(LCDdigits < 10)
Serial.print('0');
lcd.print(LCDdigits);
}