//*****************************************************************************************************************
//*****************************************************************************************************************
//************<<<< Arduino Nano, DS3231 Real Time Clock & Six Relay Module Lights Timer V3.0 >>>>******************
//*****************************************************************************************************************
//*****************************************************************************************************************
/*
Sketch uses 5722 bytes (18%) of program storage space. Maximum is 30720 bytes.
Global variables use 286 bytes (13%) of dynamic memory, leaving 1762 bytes for local variables. Maximum is 2048 bytes.
************** UPDATED ON Oct 13 2018 *************
*/
// no oled version
// six lights/relay control each with two on/off routines
// for oled version
//*****************************************************************************************************************
//*********************<<<< PLEASE VISIT / SUBSCRIBE MY YOUTUBE CHANNEL >>>>***************************************
// comment for more info
//*********************<<<< Youtube.com/CrazyGuyOfficial >>>>*****************************************
//*****************************************************************************************************************
//*****************************************************************************************************************
// INCLUDE LIBRARIES
//*****************************************************************************************************************
#include <Time.h> // Time Manipulation
#include <Wire.h>
#include <DS1307RTC.h> // DS1307 RTC
//**********************//**********************//**********************
// PINS AND CONNECTIONS
//**********************//**********************//**********************
const byte lightBlink = 3 ;
const byte lightOne = 5 ;
const byte lightTwo = 6 ;
const byte lightThree = 4 ;
const byte lightFour = 7 ;
const byte lightFive = 2 ;
const byte lightSix = 8 ;
// DS3231 RTC "SDA to A4", "SCL to A5" "Vcc to 5V arduino pin Gnd to Gnd"
// Add more names/pins for more relays
//##################################################
// Light Timer ON/OFF Time Settings DEFAULT
//##################################################
byte OnOne1 = 14 ; // Hour when Light 1 will turn ON (24 hr format NO zeros before single digits)
byte OffOne1 = 8 ; // Hour when Light 1 will turn OFF (24 hr format NO zeros before single digits)
byte OnOne2 = 14 ; // Hour when Light 1 will turn ON (24 hr format NO zeros before single digits)
byte OffOne2 = 8 ; // Hour when Light 1 will turn OFF (24 hr format NO zeros before single digits)
byte OnTwo1 = 20 ;
byte OffTwo1 = 8 ;
byte OnTwo2 = 20 ;
byte OffTwo2 = 8 ;
byte OnThree1 = 14 ;
byte OffThree1 = 8 ;
byte OnThree2 = 14 ;
byte OffThree2 = 8 ;
byte OnFour1 = 14 ;
byte OffFour1 = 8 ;
byte OnFour2 = 14 ;
byte OffFour2 = 8 ;
byte OnFive1 = 14 ;
byte OffFive1 = 8 ;
byte OnFive2 = 14 ;
byte OffFive2 = 8 ;
byte OnSix1 = 14 ;
byte OffSix1 = 8 ;
byte OnSix2 = 14 ;
byte OffSix2 = 8 ;
//*****************************************************************************************************************
bool RTCerr = 0;
bool LightOneSts = 0 ;
bool LightTwoSts = 0 ;
bool LightThreeSts = 0 ;
bool LightFourSts = 0 ;
bool LightFiveSts = 0 ;
bool LightSixSts = 0 ;
bool ppOne1 = 0 ;
bool ppOne2 = 0 ;
bool ppTwo1 = 0 ;
bool ppTwo2 = 0 ;
bool ppThree1 = 0 ;
bool ppThree2 = 0 ;
bool ppFour1 = 0 ;
bool ppFour2 = 0 ;
bool ppFive1 = 0 ;
bool ppFive2 = 0 ;
bool ppSix1 = 0 ;
bool ppSix2 = 0 ;
unsigned long SecsOne = 0;
//##################
//## RTC ADDRESS ##
//##################
#define DS1307_ID 0x68 // I2c Address of the RTC
byte zero = 0x00; //workaround for issue #527
//#################################
//*****************************************************************************************************************
// SETUP BEGINS
//*****************************************************************************************************************
void setup()
{
digitalWrite(lightOne, HIGH);
digitalWrite(lightTwo, HIGH); // turn the relay "OFF" and turning the pin "LOW" turns the relay "ON"
digitalWrite(lightThree, HIGH);
digitalWrite(lightFour, HIGH);
digitalWrite(lightFive, HIGH); // turn the relay "OFF" and turning the pin "LOW" turns the relay "ON"
digitalWrite(lightSix, HIGH);
pinMode(lightBlink, OUTPUT);
pinMode(lightOne, OUTPUT);
pinMode(lightTwo, OUTPUT);
pinMode(lightThree, OUTPUT);
pinMode(lightFour, OUTPUT);
pinMode(lightFive, OUTPUT);
pinMode(lightSix, OUTPUT);
//**********************//**********************//***********************//**********************
//Check to see if the RTC is present.if yes then Set the ARDUINO's INTERNAL clock accordingly
//**********************//**********************//***********************//**********************
Wire.beginTransmission(DS1307_ID);
Wire.write((uint8_t)0x00);
setSyncProvider(RTC.get); //Yes it did, Sync the time from the RTC
setSyncInterval(20);
if (timeStatus() != timeSet)
RTCerr = 1;
else
RTCerr = 0;
Delay15S();
}
//*****************************************************************************************************************
// SETUP END
//*****************************************************************************************************************
void Delay15S()
{
delay(1500);
}
//*****************************************************************************************************************
// LOOP BEGINS
//*****************************************************************************************************************
void loop()
{
//#####################################
//####### LIGHTs ON/OFF ###############
//#####################################
//########## LIGHT ONE PP1##########################
if (OffOne1 > OnOne1)
{
if (hour() >= OnOne1 && hour () <= OffOne1 - 1)
{
TurnLightOneOn1();
}
else
{
TurnLightOneOff1();
}
}
//**********************************************************
if (OffOne1 < OnOne1 )
{
if (hour() >= OnOne1 || hour () <= OffOne1 - 1)
{
TurnLightOneOn1();
}
else
{
TurnLightOneOff1();
}
}
//########## LIGHT ONE PP2 ##########################
if (OffOne2 > OnOne2)
{
if (hour() >= OnOne2 && hour () <= OffOne2 - 1)
{
TurnLightOneOn2();
}
else
{
TurnLightOneOff2();
}
}
//**********************************************************
if (OffOne2 < OnOne2 )
{
if (hour() >= OnOne2 || hour () <= OffOne2 - 1)
{
TurnLightOneOn2();
}
else
{
TurnLightOneOff2();
}
}
//####################################################################
//########## LIGHT TWO pp1 ##########################
if (OffTwo1 > OnTwo1)
{
if (hour() >= OnTwo1 && hour () <= OffTwo1 - 1)
{
TurnLightTwoOn1();
}
else
{
TurnLightTwoOff1();
}
}
//**********************************************************
if (OffTwo1 < OnTwo1)
{
if (hour() >= OnTwo1 || hour () <= OffTwo1 - 1)
{
TurnLightTwoOn1();
}
else
{
TurnLightTwoOff1();
}
}
//########## LIGHT TWO pp2 ##########################
if (OffTwo2 > OnTwo2)
{
if (hour() >= OnTwo2 && hour () <= OffTwo2 - 1)
{
TurnLightTwoOn2();
}
else
{
TurnLightTwoOff2();
}
}
//**********************************************************
if (OffTwo2 < OnTwo2)
{
if (hour() >= OnTwo2 || hour () <= OffTwo2 - 1)
{
TurnLightTwoOn2();
}
else
{
TurnLightTwoOff2();
}
}
//####################################################################
//########## LIGHT THREE pp 1 ##########################
if (OffThree1 > OnThree1)
{
if (hour() >= OnThree1 && hour () <= OffThree1 - 1)
{
TurnLightThreeOn1();
}
else
{
TurnLightThreeOff1();
}
}
//**********************************************************
if (OffThree1 < OnThree1)
{
if (hour() >= OnThree1 || hour () <= OffThree1 - 1)
{
TurnLightThreeOn1();
}
else
{
TurnLightThreeOff1();
}
}
//########## LIGHT THREE pp 2 ##########################
if (OffThree2 > OnThree2)
{
if (hour() >= OnThree2 && hour () <= OffThree2 - 1)
{
TurnLightThreeOn2();
}
else
{
TurnLightThreeOff2();
}
}
//**********************************************************
if (OffThree2 < OnThree2)
{
if (hour() >= OnThree2 || hour () <= OffThree2 - 1)
{
TurnLightThreeOn2();
}
else
{
TurnLightThreeOff2();
}
}
//####################################################################
//########## LIGHT FOUR pp1 ##########################
if (OffFour1 > OnFour1)
{
if (hour() >= OnFour1 && hour () <= OffFour1 - 1)
{
TurnLightFourOn1();
}
else
{
TurnLightFourOff1();
}
}
//**********************************************************
if (OffFour1 < OnFour1)
{
if (hour() >= OnFour1 || hour () <= OffFour1 - 1)
{
TurnLightFourOn1();
}
else
{
TurnLightFourOff1();
}
}
//########## LIGHT FOUR pp2 ##########################
if (OffFour2 > OnFour2)
{
if (hour() >= OnFour2 && hour () <= OffFour2 - 1)
{
TurnLightFourOn2();
}
else
{
TurnLightFourOff2();
}
}
//**********************************************************
if (OffFour2 < OnFour2)
{
if (hour() >= OnFour2 || hour () <= OffFour2 - 1)
{
TurnLightFourOn2();
}
else
{
TurnLightFourOff2();
}
}
//####################################################################
//########## LIGHT FIVE pp1 ##########################
if (OffFive1 > OnFive1)
{
if (hour() >= OnFive1 && hour () <= OffFive1 - 1)
{
TurnLightFiveOn1();
}
else
{
TurnLightFiveOff1();
}
}
//**********************************************************
if (OffFive1 < OnFive1)
{
if (hour() >= OnFive1 || hour () <= OffFive1 - 1)
{
TurnLightFiveOn1();
}
else
{
TurnLightFiveOff1();
}
}
//########## LIGHT FIVE pp2 ##########################
if (OffFive2 > OnFive2)
{
if (hour() >= OnFive2 && hour () <= OffFive2 - 1)
{
TurnLightFiveOn2();
}
else
{
TurnLightFiveOff2();
}
}
//**********************************************************
if (OffFive2 < OnFive2)
{
if (hour() >= OnFive2 || hour () <= OffFive2 - 1)
{
TurnLightFiveOn2();
}
else
{
TurnLightFiveOff2();
}
}
//####################################################################
//########## LIGHT SIX pp1 ##########################
if (OffSix1 > OnSix1)
{
if (hour() >= OnSix1 && hour () <= OffSix1 - 1)
{
TurnLightSixOn1();
}
else
{
TurnLightSixOff1();
}
}
//**********************************************************
if (OffSix1 < OnSix1)
{
if (hour() >= OnSix1 || hour () <= OffSix1 - 1)
{
TurnLightSixOn1();
}
else
{
TurnLightSixOff1();
}
}
//########## LIGHT SIX pp2 ##########################
if (OffSix2 > OnSix2)
{
if (hour() >= OnSix2 && hour () <= OffSix2 - 1)
{
TurnLightSixOn2();
}
else
{
TurnLightSixOff2();
}
}
//**********************************************************
if (OffSix2 < OnSix2)
{
if (hour() >= OnSix2 || hour () <= OffSix2 - 1)
{
TurnLightSixOn2();
}
else
{
TurnLightSixOff2();
}
}
//####################################################################
//#####################################
// Blink Led And Call RTC TEST
//#####################################
if (millis() / 1000 - SecsOne > 10 ) //
{
digitalWrite (lightBlink, HIGH); // blink status LED
rtctest();
SecsOne = millis() / 1000; // then reset the timer
}
}
//**********************//**********************//**********************
// LOOP END
//**********************//**********************//**********************
void TurnLightOneOn1()
{
if (!LightOneSts)
{
digitalWrite(lightOne, LOW);
LightOneSts = 1 ;
Delay15S();
} ppOne1 = 1 ;
}
void TurnLightOneOff1()
{
if (!ppOne2)
{
digitalWrite(lightOne, HIGH);
LightOneSts = 0 ;
}
ppOne1 = 0 ;
}
void TurnLightOneOn2()
{
if (!LightOneSts)
{
digitalWrite(lightOne, LOW);
LightOneSts = 1 ;
Delay15S();
} ppOne2 = 1 ;
}
void TurnLightOneOff2()
{
if (!ppOne1)
{
digitalWrite(lightOne, HIGH);
LightOneSts = 0 ;
}
ppOne2 = 0 ;
}
void TurnLightTwoOn1()
{
if (!LightTwoSts)
{
digitalWrite(lightTwo, LOW);
LightTwoSts = 1 ;
Delay15S();
} ppTwo1 = 1 ;
}
void TurnLightTwoOff1()
{
if (!ppTwo2)
{
digitalWrite(lightTwo, HIGH);
LightTwoSts = 0 ;
}
ppTwo1 = 0 ;
}
void TurnLightTwoOn2()
{
if (!LightTwoSts)
{
digitalWrite(lightTwo, LOW);
LightTwoSts = 1 ;
Delay15S();
} ppTwo2 = 1 ;
}
void TurnLightTwoOff2()
{
if (!ppTwo1)
{
digitalWrite(lightTwo, HIGH);
LightTwoSts = 0 ;
}
ppTwo2 = 0 ;
}
void TurnLightThreeOn1()
{
if (!LightThreeSts)
{
digitalWrite(lightThree, LOW);
LightThreeSts = 1 ;
Delay15S();
} ppThree1 = 1 ;
}
void TurnLightThreeOff1()
{
if (!ppThree2)
{
digitalWrite(lightThree, HIGH);
LightThreeSts = 0 ;
}
ppThree1 = 0 ;
}
void TurnLightThreeOn2()
{
if (!LightThreeSts)
{
digitalWrite(lightThree, LOW);
LightThreeSts = 1 ;
Delay15S();
} ppThree2 = 1 ;
}
void TurnLightThreeOff2()
{
if (!ppThree1)
{
digitalWrite(lightThree, HIGH);
LightThreeSts = 0 ;
}
ppThree2 = 0 ;
}
void TurnLightFourOn1()
{
if (!LightFourSts)
{
digitalWrite(lightFour, LOW);
LightFourSts = 1 ;
Delay15S();
}
ppFour1 = 1;
}
void TurnLightFourOff1()
{
if (!ppFour2)
{
digitalWrite(lightFour, HIGH);
LightFourSts = 0 ;
}
ppFour1 = 0;
}
void TurnLightFourOn2()
{
if (!LightFourSts)
{
digitalWrite(lightFour, LOW);
LightFourSts = 1 ;
Delay15S();
} ppFour2 = 1;
}
void TurnLightFourOff2()
{
if (!ppFour1)
{
digitalWrite(lightFour, HIGH);
LightFourSts = 0 ;
}
ppFour2 = 0;
}
void TurnLightFiveOn1()
{
if (!LightFiveSts)
{
digitalWrite(lightFive, LOW);
LightFiveSts = 1 ;
Delay15S();
} ppFive1 = 1;
}
void TurnLightFiveOff1()
{
if (!ppFive2)
{
digitalWrite(lightFive, HIGH);
LightFiveSts = 0 ;
}
ppFive1 = 0;
}
void TurnLightFiveOn2()
{
if (!LightFiveSts)
{
digitalWrite(lightFive, LOW);
LightFiveSts = 1 ;
Delay15S();
} ppFive2 = 1;
}
void TurnLightFiveOff2()
{
if (!ppFive1)
{
digitalWrite(lightFive, HIGH);
LightFiveSts = 0 ;
}
ppFive2 = 0;
}
void TurnLightSixOn1()
{
if (!LightSixSts)
{
digitalWrite(lightSix, LOW);
LightSixSts = 1 ;
Delay15S();
}
ppSix1 = 1;
}
void TurnLightSixOff1()
{
if (!ppSix2)
{
digitalWrite(lightSix, HIGH);
LightSixSts = 0 ;
}
ppSix1 = 0;
}
void TurnLightSixOn2()
{
if (!LightSixSts)
{
digitalWrite(lightSix, LOW);
LightSixSts = 1 ;
Delay15S();
} ppSix2 = 1;
}
void TurnLightSixOff2()
{
if (!ppSix1)
{
digitalWrite(lightSix, HIGH);
LightSixSts = 0 ;
}
ppSix2 = 0;
}
//#####################
// RTC Test ##########
//#####################
void rtctest()
{
if (Wire.endTransmission() == 0) //Did the RTC respond?
{
RTCerr = 0; // set RTC error status boolean to false
digitalWrite (lightBlink, LOW); // blink status LED
}
else
{
RTCerr = 1;
digitalWrite (lightBlink, HIGH);
}
}
Do-it-yourself,DIY,How-To,Electronics,Arduino,Esp,Raspberry-Pi,Programming,Hacking Stuff,Gardening,Photography,Hobby,Fun
Arduino Grow Light Timer Six Switch/Relay Dual on/off Control V3.0 no oled/button version
Labels:
arduino,
auto switch,
control,
diy,
do it yourself,
ds3231,
grow,
light on off,
nano,
rtc,
timer
Subscribe to:
Posts (Atom)