Arduino Grow Light Timer Six Switch/Relay Dual on/off Control V3.0 no oled/button version


 //*****************************************************************************************************************  
 //*****************************************************************************************************************  
   
   
 //************<<<< 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);  
   
  }  
   
 }