Smart Irrigation System using Arduino and Soil Moisture Sensor

Published  February 23, 2022   0
Smart Irrigation Aquacontroller using Atmega328

Being an Urban Planning professional and electronics hobbyist always found challenges whenever I had to design a Water Management Plan for cities or town. A huge volume of water is used for outdoor-use demand which is used for watering the garden and lawn for Residential areas and also for parks and grounds of hospital, railway yard, Airport. As much as 50% of this water is wasted due to overwatering caused by inefficiencies in traditional irrigation methods and systems. Smart irrigation technology is the answer So, I started to design a device to automate Drip Irrigation and sprinkler system and thus this Aquacontroller came into being. And also tried to integrate and automate the lighting system of such places. Thus, saving water, electricity and manpower at the same time. Soil moisture sensor-based smart irrigation controllers use one of several well-established technologies to measure soil moisture content. When buried in the root zone of turf, trees or shrubs, the sensors accurately determine the moisture level in the soil and transmit this reading to the controller. There are two different soil moisture sensor-based systems available: Suspended cycle irrigation systems, which are set like traditional timer controllers, with watering schedules, start times and duration. The difference is that the system will stop the next scheduled irrigation when there is enough moisture in the soil. Water on demand irrigation requires no programming of irrigation duration (only start times and days of the week to water). It has a user-set lower and upper threshold, which initiates irrigation when the soil moisture level fails to meet those levels. Both these methods are integrated into this device to cover most types of requirements by the beneficiaries. 

Smart Irrigation Controller System

We have previously built some projects on irrigation systems,

Component Required for Smart Irrigation Aquacontroller

Irrigation System

Project Used Hardware

  • Atmega 328 IC,
  • DS3231 IC,
  • 1602 Character LCD with I2C Breakout Board,
  • AC-DC Converter Module,
  • 10Amp Relay,
  • 6Amp Socket,
  • Soil Moisture Sensor,
  • Rainfall Sensor, 
  • LDR Sensor,
  • Flow Sensor,
  • Buzzer,
  • 4”x7” inch Enclosure,
  • Main Cord.

Project Used Software

  • Arduino IDE, 
  • EasyEDA,
  • Adobe Photoshop,
  • Autodesk Autocad.

Project Hardware/Software Selection

The Atmega 328 IC from Atmel was used for its simplicity and user-friendly developing environment like the Arduino IDE. The DS3231 acts as Real Time Clock and provides timer function. It also has temperature compensated crystal built-in. EasyEDA was used to develop the circuit diagram and for designing the PCB (Printed Circuit Board). Autocad was used for measured drawing of the device which further helped in making the top label cover of the device, enhanced in Adobe Photoshop. Soil moisture sensor is used to detect the presence of water in the soil. Rain sensor is used to provide rain delay function to prevent overwatering after rain. Flow sensor keep a check on the amount of water flowing out, this data is used to optimize the watering schedule and frequency.

Smart Irrigation Aquacontroller Circuit Diagram

Smart Irrigation Aquacontroller Circuit Diagram

The circuit has been made with Atmega328 at its centre. The Real Time Clock RTC DS3231 provide timer and schedule function to the circuit so that any pump for reservoir or lights can be automated. The soil moisture sensor can be connected to the USB ports to sense moisture presence in the soil and thus automatically switch on solenoid valve or water pump to irrigate. A temperature sensor is presence for monitoring the air temperature which along with the Rain sensor provides Rain Delay function. A flow sensor can be connected to the last USB port to measure amount of water flowing out. And a LDR (Light Dependent Resistor) sensor is present to automate garden or field lights.

 

Prim AquaController PCB

 

Code
/*

Smart Irrigation Aqua Controllers V.2

**This code is part of a much bigger project of mine, that's why few bits of code may remain which plays no part in the current project.

Author - Soumyabrata Debnath


*/

//Libraries Initialization

#include <Wire.h>

#include <EEPROM.h>

#include <Arduino.h>

#include <OneWire.h>

#include <IRremote.h>

#include <LiquidCrystal_I2C.h>

#include <DallasTemperature.h>

#include <RealTimeClockDS1307.h> 


//Pin Assignment

#define Socket_A       0

#define Socket_B       1

#define Soil_1_sense 2

#define Buzzer           3

#define Soil_2_sense 4

#define DC1_Out       5 

#define DC2_Out       6

#define Rain              7

#define Flow              8

#define LCD_BKL       9

#define Button_Sel   10

#define Button_Dn    11

#define Button_Up    12

#define Button_Prog 13

#define Temp_board 14

#define Temp_sense 15

#define ir_sense        16

#define LDR              17

//  SDA                       18

//  SCL                       19


// Variables Initialization

// General.................


byte count;

byte prog =  0;

byte str  =  1;

byte btReady  = 0;

byte prog_sel = 0;

byte prog_sel_timer1 = 0;

unsigned long current_t;

unsigned long prog_btPushedMillis;

unsigned long RTC_previousMillis = 0;

byte Soil_1_sensorState   = 0;

byte Leak_sensorState  = 0;

// Push_Button...............

byte Button_Prog_State = 0; 

byte Button_Up_State   = 0;

byte Button_Dn_State   = 0;

byte Button_Sel_State  = 0;

byte prog_day = 0;

byte hr_val = 0;

byte min_val = 0;

// Socket_A..................

unsigned long s1_t1on ;

unsigned long s1_t1off;

unsigned long s1_t2on ;

unsigned long s1_t2off;

byte Socket_A_State    = HIGH;

// Socket_B..................

unsigned long s2_t1on ;

unsigned long s2_t1off;

unsigned long s2_t2on ;

unsigned long s2_t2off;

byte Socket_B_State    = HIGH;

// DC1....................

byte F_val    = 0;

byte DC1_Temp = 0;

// Light..................

byte L_Auto   = 1;

byte Light_P  = 0;

byte L_percent   ;

byte L_val    = 0;

byte R_val    = 0;

byte Ramp_Min = 0;

byte Ramp_flag = 0;

int  Ramp_counter = 0;

float Light_PWM ;

float Inc_Light_PWM = 0;

unsigned long Light_previousMillis;

unsigned long Light_currentMillis;

unsigned long L_t1on ;

unsigned long L_t1off;

unsigned long L_t2on ;

unsigned long L_t2off;

// Temp...................

float temp_C = 0;

// RTC.....................

byte  hours     = 0;

byte  minutes   = 0;

byte  seconds   = 0;

byte  days      = 0;

byte  dates     = 0;

byte  months    = 0;

 int  years     = 0;

char* day_name[]={"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"};


// Timer1

byte day1A    = 0;

byte day2A    = 0;

byte day3A    = 0;

byte day4A    = 0;

byte day5A    = 0;

byte day6A    = 0;

byte day7A    = 0;


byte h_on_1A  = 0;

byte m_on_1A  = 0;

byte h_off_1A = 0;

byte m_off_1A = 0;


byte h_on_2A  = 0;

byte m_on_2A  = 0;

byte h_off_2A = 0;

byte m_off_2A = 0;


// Timer2

byte day1B    = 0;

byte day2B    = 0;

byte day3B    = 0;

byte day4B    = 0;

byte day5B    = 0;

byte day6B    = 0;

byte day7B    = 0;


byte h_on_1B  = 0;

byte m_on_1B  = 0;

byte h_off_1B = 0;

byte m_off_1B = 0;


byte h_on_2B  = 0;

byte m_on_2B  = 0;

byte h_off_2B = 0;

byte m_off_2B = 0;


// Light Timer

byte h_on_1L  = 0;

byte m_on_1L  = 0;

byte h_off_1L = 0;

byte m_off_1L = 0;


byte h_on_2L  = 0;

byte m_on_2L  = 0;

byte h_off_2L = 0;

byte m_off_2L = 0;


// Rain Timer

byte h_on_1F  = 0;

byte m_on_1F  = 0; 

byte h_on_2F  = 0;

byte m_on_2F  = 0;


//Peripherals Initialization

OneWire oneWire(Temp_sense);

DallasTemperature sensors(&oneWire);

LiquidCrystal_I2C lcd(0x27,16,2);


byte degree[8] = {B11100,

                           B10100,

                           B11100,

                           B00000,

                           B00000,

                           B00000,

                           B00000,

                           B00000};

byte thermo[8] = {B01100,

                           B01100,

                           B01100,

                           B01100,

                           B01100,

                           B11110,

                           B11110,

                           B01100};

byte arrow[8]  =  {B10000,

                           B11000,

                           B11100,

                           B11110,

                           B11100,

                           B11000,

                           B10000,

                           B00000};          

//-------------------------------------------------------------------

void Soil_1()  //

{

    Soil_1_sensorState = digitalRead(Soil_1_sense);  

    if (Soil_1_sensorState == LOW)

    {   

        digitalWrite(DC1_Out , HIGH);   

    }

    else

    {  

        lcd.setCursor(13, 1);

        lcd.print("Soil_1");      

        //delay(500);

        digitalWrite(DC1_Out , LOW);            

        //tone(Buzzer, 1000, 500);

    }

}


// Time and Date Function for LCD

void calender()

{

  RTC.readClock();

    hours     = RTC.getHours    ();

    minutes  = RTC.getMinutes  ();

    seconds = RTC.getSeconds  ();

    dates     = RTC.getDate     ();

    months  = RTC.getMonth    ();

    years     = RTC.getYear     ();

    days      = RTC.getDayOfWeek(); 

  lcd.clear(); 

  printDigits(hours);

  lcd.print(":");

  printDigits(minutes);

  lcd.print(":");

  printDigits(seconds);

  lcd.print(" ");

  lcd.setCursor(0, 1); 

  printDigits(dates);

  lcd.print(":"); 

  printDigits(months);

  lcd.print(":");

  printDigits(years);

  lcd.print(" ");  

  lcd.setCursor(9, 1);

  lcd.print(day_name[days-1]); 

  if (temp_C > 9 && temp_C < 100)

  {  

      lcd.setCursor(9, 0);

      lcd.write(byte(1));

      lcd.print(temp_C,1);

      lcd.write(byte(0));

      lcd.print("C");     

  } 

}

void printDigits(int digits) // Sub function for calender

{

  if(digits < 10)

  lcd.print('0');

  lcd.print(digits);

}

void temp() // function for temperature monitor

{  

  sensors.requestTemperatures(); 

  temp_C = sensors.getTempCByIndex(0);

  /*float AverageTemperature = 0;

  int MeasurementsToAverage = 10;

  for(int i = 0; i < MeasurementsToAverage; ++i)

  {

      sensors.requestTemperatures();

      AverageTemperature += sensors.getTempCByIndex(0);

      delay(50);      

  }

  temp_C = AverageTemperature / MeasurementsToAverage;*/ 

}

void day_select_A()

{

  lcd.clear();

  EEPROM.write(11, day1A);

  EEPROM.write(12, day2A);

  EEPROM.write(13, day3A);

  EEPROM.write(14, day4A);

  EEPROM.write(15, day5A);

  EEPROM.write(16, day6A);

  EEPROM.write(17, day7A);

}

void day_select_B()

{

  lcd.clear();

  EEPROM.write(41, day1B);

  EEPROM.write(42, day2B);

  EEPROM.write(43, day3B);

  EEPROM.write(44, day4B);

  EEPROM.write(45, day5B);

  EEPROM.write(46, day6B);

  EEPROM.write(47, day7B);

} 

void Press_Up_Dn()

{

  lcd.clear(); 

  lcd.print(F("Press Up/Dn ->"));

  lcd.setCursor(0, 1); 

}

void Press_Up_Sel()

{

  lcd.setCursor(0, 1);

  lcd.print(F("Press Up / Sel"));

  delay(1000);     

}

void Selected_0()

{

 lcd.clear(); 

 lcd.setCursor(3, 0);

 lcd.print(F("Selected"));

 delay(1000);          

 Press_Up_Dn();

}

void Selected_1()

{   

 lcd.setCursor(1, 1);

 lcd.print(F("Selected"));

 delay(1000); 

}

void days_save()

{   

 lcd.setCursor(0, 1);

 lcd.print(F("Press Dn to Save"));

 delay(1000);

}


//-------------------------------------------------------------------------

//Setup Initialization

void setup()

{ 

  lcd.init();             // initialize the lcd  

  lcd.home();

  lcd.backlight();

  lcd.createChar(0,  degree);

  lcd.createChar(1,  thermo);                                                        

  lcd.createChar(2,   arrow);


  pinMode(DC1_Out,    OUTPUT);  

  pinMode(DC2_Out,    OUTPUT);

  pinMode(Rain,       OUTPUT);

  pinMode(Buzzer,     OUTPUT);

  pinMode(LDR,         INPUT);

  pinMode(Button_Prog, INPUT);

  pinMode(Button_Up,   INPUT);

  pinMode(Button_Dn,   INPUT);

  pinMode(Button_Sel,  INPUT);

  pinMode(Soil_1_sense,INPUT);

  pinMode(Soil_2_sense,INPUT);

  pinMode(Flow,  INPUT);  

  sensors.begin();

  sensors.setResolution(12); // (9)0.5C:94ms, (10)0.25C:188ms, (11)0.125C:375ms, (12)0.0625C:750ms


  day1A    = EEPROM.read(11);

  day2A    = EEPROM.read(12);

  day3A    = EEPROM.read(13);

  day4A    = EEPROM.read(14);

  day5A    = EEPROM.read(15);

  day6A    = EEPROM.read(16);

  day7A    = EEPROM.read(17); 


  h_on_1A  = EEPROM.read(21);

  m_on_1A  = EEPROM.read(22);

  h_off_1A = EEPROM.read(23);

  m_off_1A = EEPROM.read(24);

  h_on_2A  = EEPROM.read(25);

  m_on_2A  = EEPROM.read(26);

  h_off_2A = EEPROM.read(27);

  m_off_2A = EEPROM.read(28);


  day1B    = EEPROM.read(41);

  day2B    = EEPROM.read(42);

  day3B    = EEPROM.read(43);

  day4B    = EEPROM.read(44);

  day5B    = EEPROM.read(45);

  day6B    = EEPROM.read(46);

  day7B    = EEPROM.read(47); 


  h_on_1B  = EEPROM.read(51);

  m_on_1B  = EEPROM.read(52);

  h_off_1B = EEPROM.read(53);

  m_off_1B = EEPROM.read(54);

  h_on_2B  = EEPROM.read(55);

  m_on_2B  = EEPROM.read(56);

  h_off_2B = EEPROM.read(57);

  m_off_2B = EEPROM.read(58);


  h_on_1L  = EEPROM.read(201);

  m_on_1L  = EEPROM.read(202);

  h_off_1L = EEPROM.read(203);

  m_off_1L = EEPROM.read(204);

  h_on_2L  = EEPROM.read(205);

  m_on_2L  = EEPROM.read(206);

  h_off_2L = EEPROM.read(207);

  m_off_2L = EEPROM.read(208);


  h_on_1F  = EEPROM.read(221);

  m_on_1L  = EEPROM.read(222); 

  h_on_2F  = EEPROM.read(223);

  m_on_2L  = EEPROM.read(224);


  Light_P  = EEPROM.read(250); //Light Intensity Percentage

  Ramp_Min = EEPROM.read(251); //Light ramping in minutes

  DC1_Temp = EEPROM.read(252); //DC1 Temperature                                                               


  tone(Buzzer, 1000, 300);


  lcd.print(F("Initializing"));

  delay(300);

  lcd.clear();

  lcd.print(F("Initializing."));

  delay(300);

  lcd.clear();

  lcd.print(F("Initializing.."));

  delay(300);

  lcd.clear();

  lcd.print(F("Initializing..."));

  delay(300);

  lcd.clear();

  lcd.print(F("Initializing...."));

  delay(300);

  lcd.clear();

  lcd.setCursor(0, 0);

  lcd.print(F("Smart Irrigation"));

  lcd.setCursor(0, 1);

  lcd.print(F("Aqua Controller"));

  delay(1000);

  lcd.clear();  

  temp();   

}

//---------------------------------------------------------------------

// Looping Sequence

void loop()

{

   unsigned long currentMillis = millis();

   if (btReady == 1)

   {

       if ((unsigned long)(currentMillis - prog_btPushedMillis) >= 4000)

       {

            str = 1;           

       }

   }

   unsigned long RTC_currentMillis = millis();

   if(RTC_currentMillis - RTC_previousMillis >= 1000)

   {

      RTC_previousMillis = RTC_currentMillis;

      if (str == 1)

      {         

          calender();  // Time and Date on LCD

          temp();     // Temparature         

          Soil_1();             

          prog = 0;

          prog_sel = 0;                        

      }  

   }  

   //--------------------------------------------------------

   current_t = (hours*10000) + (minutes*100) + seconds;   // Summation of current hour and minute

   //--------------------------------------------------------

   // Summation of User stored Hour and Minute

   s1_t1on  = (h_on_1A  *10000) + (m_on_1A  *100);

   s1_t1off = (h_off_1A *10000) + (m_off_1A *100);

   s1_t2on  = (h_on_2A  *10000) + (m_on_2A  *100);

   s1_t2off = (h_off_2A *10000) + (m_off_2A *100);  

     

   s2_t1on  = (h_on_1B  *10000) + (m_on_1B  *100);

   s2_t1off = (h_off_1B *10000) + (m_off_1B *100);

   s2_t2on  = (h_on_2B  *10000) + (m_on_2B  *100);

   s2_t2off = (h_off_2B *10000) + (m_off_2B *100);

             

   if (days == day1A || days == day2A || days == day3A || days == day4A || days == day5A || days == day6A || days == day7A)

   {   // Socket_A on/off with respect to current time

       if (current_t == s1_t1on || current_t == s1_t2on)

       {

           digitalWrite(Socket_A, HIGH);

           Socket_A_State = HIGH;      

       }

       if (current_t > s1_t1on && current_t < s1_t1off)

       {

           digitalWrite(Socket_A, Socket_A_State); 

       }

     if (current_t > s1_t2on && current_t < s1_t2off)

       {

           digitalWrite(Socket_A, Socket_A_State); 

       }

       if (current_t == s1_t1off || current_t == s1_t2off)

       {

           digitalWrite(Socket_A, LOW);

       }

   }

   if (days == day1B || days == day2B || days == day3B || days == day4B || days == day5B || days == day6B || days == day7B)

   {   // Socket_B on/off with respect to current time

       if (current_t == s2_t1on || current_t == s2_t2on)

       {

           digitalWrite(Socket_B, HIGH);

           Socket_A_State = HIGH;      

       }

       if (current_t > s2_t1on && current_t < s2_t1off)

       {

           digitalWrite(Socket_B, Socket_B_State); 

       }

     if (current_t > s2_t2on && current_t < s2_t2off)

       {

           digitalWrite(Socket_B, Socket_B_State); 

       }

       if (current_t == s2_t1off || current_t == s2_t2off)

       {

           digitalWrite(Socket_B, LOW);

       }

   } 


// Main Loop ends  

//-----------------------------------------------------------------------  

   Button_Prog_State = digitalRead(Button_Prog);     

   if (Button_Prog_State == HIGH)     

   {

       prog_btPushedMillis = currentMillis; 

       btReady = 1;    

       if (prog_sel_timer1 == 0)

       {

           str = 0;

           prog = prog + 1;

           lcd.home();

           switch (prog)

           {

           case 1:

                lcd.clear();       

                lcd.write(byte(2));    

                lcd.print(F("Clock Settings"));

        lcd.setCursor(1, 1); 

                lcd.print(F("Timer 1"));

                delay(500);        

                break;

           case 2:

                lcd.clear();       

                lcd.write(byte(2));      

                lcd.print(F("Timer 1"));

        lcd.setCursor(1, 1);

                lcd.print(F("Timer 2"));

                delay(500);        

                break;

           case 3:

                lcd.clear();       

                lcd.write(byte(2));        

                lcd.print(F("Timer 2"));

        lcd.setCursor(1, 1);  

                lcd.print(F("DC1")); 

                delay(500);        

                break;

           case 4:

                lcd.clear();       

                lcd.write(byte(2));

                lcd.print(F("DC1"));

        lcd.setCursor(1, 1);

        lcd.print(F("Light Timer"));

                delay(500);        

                break;

           default:

                prog = 0; 

           }

       }

       if (prog_sel_timer1 == 1) 

       {

           str = 1; 

           prog = 0; 

           prog_sel = 0;  

           prog_sel_timer1 = 0;             

       }

   }

//-----------------------------------------------------------------------

//-----------------------------------------------------------------------

   Button_Up_State = digitalRead(Button_Up);  

   if (Button_Up_State == HIGH)

   {

       btReady = 0;

       if (prog == 0)      // Socket_A Manual On/Off

       {

           if (Socket_A_State == LOW)

               Socket_A_State = HIGH;           

           else

               Socket_A_State = LOW;

               digitalWrite(Socket_A, Socket_A_State);

               delay(500);

       }

       if (prog == 1)      // RTC

       {

       if (prog_sel == 1)   // Hour  (+) Set time

       {

               lcd.setCursor(10, 1);

               lcd.print(F("   ")); 

               hours = hours + 1;                             

               if (hours >= 0 && hours <= 23)

               {

                   lcd.setCursor(10, 1);

                   lcd.print(hours);

                   delay(500); 

                   RTC.setHours(hours);

                   RTC.setClock();  

               }          

               if (hours > 23)

               {

                   hours = -1;

               }              

           }

           if (prog_sel == 2)   // Minute(+) Set time

           {

               lcd.setCursor(12, 1);

               lcd.print(F("   "));

               minutes = minutes + 1;                              

               if (minutes >= 0 && minutes <= 59)

               {

                   lcd.setCursor(12, 1);

                   lcd.print(minutes);

                   delay(500); 

                   RTC.setMinutes(minutes);

                   RTC.setClock();

               }          

               if (minutes > 59)

               {

                   minutes = -1;

               }              

           }

           if (prog_sel == 3)   // Date  (+) Set time

           {

               lcd.setCursor(10, 1);

               lcd.print(F("   "));

               dates = dates + 1;                              

               if (dates >= 1 && dates <= 31)

               {

                   lcd.setCursor(10, 1);

                   lcd.print(dates);

                   delay(500); 

                   RTC.setDate(dates);

                   RTC.setClock();  

               }          

               if (dates > 31)

               {

                   dates = -1;

               }              

           }

           if (prog_sel == 4)   // Month (+) Set time

           {

               lcd.setCursor(11, 1);

               lcd.print(F("   "));

               months = months + 1;                              

               if (months >= 1 && months <= 12)

               {

                   lcd.setCursor(11, 1);

                   lcd.print(months);

                   delay(500); 

                   RTC.setMonth(months);

                   RTC.setClock();  

               }          

               if (months > 12)

               {

                   months = -1;

               }              

           }

           if (prog_sel == 5)   // Year  (+) Set time

           {

               lcd.setCursor(10, 1);

               lcd.print(F("   "));

               years = years + 1;                              

               if (years >= 0 && years <= 99)

               {

                   lcd.setCursor(10, 1);

                   lcd.print(years);

                   delay(500); 

                   RTC.setYear(years);

                   RTC.setClock();  

               }          

               if (years > 99)

               {

                   years = -1;

               }              

           }

           if (prog_sel == 6)   // Day   (+) Set time

           {

               lcd.setCursor(8, 1);

               lcd.print(F("   "));

               days = days + 1;                              

               if (days >= 1 && days <= 7)

               {

                   lcd.setCursor(8, 1);

                   lcd.print(day_name[days-1]);

                   delay(500); 

                   RTC.setDayOfWeek(days);

                   RTC.setClock();  

               }          

               if (days > 7)

               {

                   days = -1;

               }              

           }

     }

       //---------------------------------------

       if (((prog == 2 || prog == 3) && prog_sel_timer1 == 1) || (prog == 5))    // Timer 1 & 2 & Light Timer

       {          

           if ((prog_sel % 2) != 0)   // Socket Set Hour(+)

           {

               lcd.setCursor(14, 1);

               lcd.print(F("   "));          

               hr_val = hr_val + 1;                             

               if (hr_val >= 0 && hr_val <= 23)

               {

                   lcd.setCursor(14, 1);

                   lcd.print(hr_val);

                   delay(500);              

               }          

               if (hr_val > 23)

               {

                   hr_val = -1;

               }              

           }      

           if ((prog_sel % 2) == 0)   // Socket_A Set Minute(+) 

           {

               lcd.setCursor(14, 1);

               lcd.print(F("   "));             

               min_val = min_val + 1;                              

               if (min_val >= 0 && min_val <= 59)

               {

                   lcd.setCursor(14, 1);

                   lcd.print(min_val);

                   delay(500); 

               }          

               if (min_val > 59)

               {

                   min_val = -1;

               }              

           }

       }

       //---------------------------------------

     if (( prog == 2 || prog == 3) && prog_sel_timer1 == 0  &&  prog_sel == 1) // Timer 1 & 2 Days

       {

           prog_day = prog_day + 1; 

           switch (prog_day)          // Socket Set Day

           {

           case 1:

                lcd.clear();               

                lcd.print(F("Press Up to: Set"));

                lcd.setCursor(0, 1);

                lcd.print(F("Press Dn to: Clr"));

                delay(1000);          

                break;

           case 2:

                lcd.clear();

                lcd.setCursor(4, 0);

                lcd.print(F("Everyday"));

                days_save();         

                break;

           case 3:

                lcd.setCursor(5, 0);

                lcd.print(F("Sunday"));

                days_save();      

                break;

           case 4:

                lcd.setCursor(5, 0);

                lcd.print(F("Monday"));

                days_save();        

                break;

           case 5:

                lcd.setCursor(4, 0);

                lcd.print(F("Tuesday"));

                days_save();         

                break;

           case 6:

                lcd.setCursor(3, 0);

                lcd.print(F("Wednesday"));

                days_save();       

                break;

           case 7:

                lcd.setCursor(4, 0);

                lcd.print(F("Thursday"));

                days_save();         

                break;

           case 8:

                lcd.setCursor(4, 0);

                lcd.print(F("Friday"));

                days_save();      

                break;

           case 9:

                lcd.setCursor(3, 0);

                lcd.print(F("Saturday"));

                days_save();         

                break;

           default:

                prog_day = 0;

                //prog_sel = 0;  

           }

       }    

   }

//-----------------------------------------------------------------------

//-----------------------------------------------------------------------

   Button_Dn_State = digitalRead(Button_Dn);  

   if (Button_Dn_State == HIGH)

   {

       btReady = 0;

       if (prog == 1)       // RTC

     {  

         if (prog_sel == 1)   // Hour  (-) Set time

           {

               lcd.setCursor(10, 1);          

               hours = hours - 1;                             

               if (hours >= 0 && hours <= 23)

               {

               lcd.print(F("   ")); 

               lcd.setCursor(10, 1);

               lcd.print(hours);

               delay(500); 

               RTC.setHours(hours);

               RTC.setClock();  

               }           

               if (hours < 0)

               {

                   hours = 24;

               }

       }     

           if (prog_sel == 2)   // Minute(-) Set time

           {

               lcd.setCursor(12, 1);          

               minutes = minutes - 1;                            

               if (minutes >= 0 && minutes <= 59)

               {

                   lcd.print(F("   "));  

                   lcd.setCursor(12, 1);

                   lcd.print(minutes);

                   delay(500); 

                   RTC.setMinutes(minutes);

                   RTC.setClock();  

               }          

               if (minutes < 0)

               {

                   minutes = 60;

               }              

           }

           if (prog_sel == 3)   // Date  (-) Set time

           {

               lcd.setCursor(10, 1);          

               dates = dates - 1;                              

               if (dates >= 1 && dates <= 31)

               {

                   lcd.print(F("   "));

                   lcd.setCursor(10, 1);

                   lcd.print(dates);

                   delay(500); 

                   RTC.setDate(dates);

                   RTC.setClock();  

               }          

               if (dates < 0)

               {

                   dates = 32;

               }              

           }

           if (prog_sel == 4)   // Month (-) Set time

           {

               lcd.setCursor(11, 1);          

               months = months - 1;                              

               if (months >= 1 && months <= 12)

               {

                   lcd.print(F("   "));

                   lcd.setCursor(11, 1);

                   lcd.print(months);

                   delay(500); 

                   RTC.setMonth(months);

                   RTC.setClock();  

               }          

               if (months < 0)

               {

                   months = 13;

               }              

           }

           if (prog_sel == 5)   // Year  (-) Set time

           {

               lcd.setCursor(10, 1);           

               years = years - 1;                              

               if (years >= 0 && years <= 99)

               {

                   lcd.print(F("   "));

                   lcd.setCursor(10, 1);

                   lcd.print(years);

                   delay(500); 

                   RTC.setYear(years);

                   RTC.setClock();  

               }          

               if (years < 0)

               {

                   years = 100;

               }              

           }

           if (prog_sel == 6)   // Day   (-) Set time

           {

               lcd.setCursor(8, 1);          

               days = days - 1;                               

               if (days >= 1 && days <= 7)

               {

                   lcd.print(F("   "));

                   lcd.setCursor(8, 1);

                   lcd.print(day_name[days-1]);

                   delay(500); 

                   RTC.setDayOfWeek(days);

                   RTC.setClock();  

               }          

               if (days < 0)

               {

                   days = 8;

               }              

           }

     }

       //---------------------------------------------

       if ((prog == 2 && prog_sel_timer1 == 1) || (prog == 3 && prog_sel_timer1 == 1) || (prog == 5))  // Timer 1 & 2 & Light Timer

       {

           if ((prog_sel % 2) != 0)   // Socket_A Set Hour(-)

           {

               lcd.setCursor(14, 1);                      

               hr_val = hr_val - 1;                             

               if (hr_val >= 0 && hr_val <= 23)

               {

                   lcd.print(F("   "));  

                   lcd.setCursor(14, 1);

                   lcd.print(hr_val);

                   delay(500);              

               }          

               if (hr_val < 0)

               {

                   hr_val = 24;

               }              

           }

           if ((prog_sel % 2) == 0)   // Socket_A Set Minute(-) 

           {

               lcd.setCursor(14, 1);              

               min_val = min_val - 1;                              

               if (min_val >= 0 && min_val <= 59)

               {

                   lcd.print(F("   "));

                   lcd.setCursor(14, 1);

                   lcd.print(min_val);

                   delay(500); 

               }          

               if (min_val < 0)

               {

                   min_val = 60;

               }

           }              

       }

       //---------------------------------------------

     if (prog == 2 && prog_sel_timer1 == 0 && prog_sel == 1) // Timer 1 Days

       {

           switch (prog_day)     // Socket_A Save Day 

           {

           case 1:

                day1A = 0;

                day2A = 0;

                day3A = 0;

                day4A = 0;

                day5A = 0;

                day6A = 0;

                day7A = 0;

                day_select_A();

                lcd.setCursor(1, 0);

                lcd.print(F("Days cleared"));

                lcd.setCursor(0, 1);

                lcd.print(F("Press Up:Restart"));

                delay(1000);          

                break;

           case 2:

                day1A = 1;

                day2A = 2;

                day3A = 3;

                day4A = 4;

                day5A = 5;

                day6A = 6;

                day7A = 7;

                day_select_A();                                

                lcd.setCursor(0, 0);

                lcd.print(F("Everyday : Saved"));

                lcd.setCursor(2, 1);

                lcd.print(F("Press Select"));

                delay(1000);

                prog_day = 0;

                prog_sel = 1;         

                break;

           case 3:

                day1A = 1;

                EEPROM.write(11,  day1A);

                lcd.setCursor(0, 0);

                lcd.print(F("Sunday : Saved"));

                Press_Up_Sel();          

                break;

           case 4:

                day2A = 2;

                EEPROM.write(12,  day2A);

                lcd.setCursor(0, 0);

                lcd.print(F("Monday : Saved"));

                Press_Up_Sel();            

                break;

           case 5:

                day3A = 3;

                EEPROM.write(13,  day3A);

                lcd.setCursor(0, 0);

                lcd.print(F("Tuesday : Saved"));

                Press_Up_Sel();           

                break;

           case 6:

                day4A = 4;

                EEPROM.write(14,  day4A);

                lcd.setCursor(0, 0);

                lcd.print(F("Wednesday: Saved"));

                Press_Up_Sel();           

                break;

           case 7:

                day5A = 5;

                EEPROM.write(15,  day5A);

                lcd.setCursor(0, 0);

                lcd.print(F("Thursday : Saved"));

                Press_Up_Sel();           

                break;

           case 8:

                day6A = 6;

                EEPROM.write(16,  day6A);

                lcd.setCursor(0, 0);

                lcd.print(F("Friday : Saved"));

                Press_Up_Sel();           

                break;

           case 9:

                day7A = 7;

                EEPROM.write(17,  day7A);

                lcd.setCursor(0, 0);

                lcd.print(F("Saturday : Saved"));

                Press_Up_Sel();           

                break;

           default:

                prog_day = 0;

                //prog_sel = 0;    

           }             

       }

     //---------------------------------------------

     if (prog == 3 && prog_sel_timer1 == 0 && prog_sel == 1) // Timer 2 Days

     {

           switch (prog_day)     // Socket_B Save Day 

           {

           case 1:

                day1B = 0;

                day2B = 0;

                day3B = 0;

                day4B = 0;

                day5B = 0;

                day6B = 0;

                day7B = 0;

                day_select_B();

                lcd.setCursor(1, 0);

                lcd.print(F("Days cleared"));

                lcd.setCursor(0, 1);

                lcd.print(F("Press Up:Restart"));

                delay(1000);          

                break;

           case 2:

                day1B = 1;

                day2B = 2;

                day3B = 3;

                day4B = 4;

                day5B = 5;

                day6B = 6;

                day7B = 7;

                day_select_B();                               

                lcd.setCursor(0, 0);

                lcd.print(F("Everyday : Saved"));

                lcd.setCursor(2, 1);

                lcd.print(F("Press Select"));

                delay(1000);

                prog_day = 0;

                prog_sel = 1;         

                break;

           case 3:

                day1B = 1;

                EEPROM.write(41,  day1B);

                lcd.setCursor(0, 0);

                lcd.print(F("Sunday : Saved"));

                Press_Up_Sel();        

                break;

           case 4:

                day2B = 2;

                EEPROM.write(42,  day2B);

                lcd.setCursor(0, 0);

                lcd.print(F("Monday : Saved"));

                Press_Up_Sel();           

                break;

           case 5:

                day3B = 3;

                EEPROM.write(43,  day3B);

                lcd.setCursor(0, 0);

                lcd.print(F("Tuesday : Saved"));

                Press_Up_Sel();          

                break;

           case 6:

                day4B = 4;

                EEPROM.write(44,  day4B);

                lcd.setCursor(0, 0);

                lcd.print(F("Wednesday: Saved"));

                Press_Up_Sel();           

                break;

           case 7:

                day5B = 5;

                EEPROM.write(45,  day5B);

                lcd.setCursor(0, 0);

                lcd.print(F("Thursday : Saved"));

                Press_Up_Sel();           

                break;

           case 8:

                day6B = 6;

                EEPROM.write(46,  day6B);

                lcd.setCursor(0, 0);

                lcd.print(F("Friday : Saved"));

                Press_Up_Sel();          

                break;

           case 9:

                day7B = 7;

                EEPROM.write(47,  day7B);

                lcd.setCursor(0, 0);

                lcd.print(F("Saturday : Saved"));

                Press_Up_Sel();          

                break;

           default:

                prog_day = 0;

                //prog_sel = 0;    

           }             

       }                                       

   }

//-----------------------------------------------------------------------

//-----------------------------------------------------------------------

   Button_Sel_State = digitalRead(Button_Sel);  

   if (Button_Sel_State == HIGH)

   {

       btReady = 0;

       if (prog == 1)       // RTC Time Stored

       {

           prog_sel = prog_sel + 1;

           switch (prog_sel)

           {

           case 1:                 //RTC Hour Stored               

                Selected_1();                    

                Press_Up_Dn();

                lcd.print(F("Set Hour: "));

                lcd.setCursor(10, 1);

                lcd.print(hours);

                delay(500);           

                break;

           case 2:                 //RTC Minute Stored

                Press_Up_Dn();

                lcd.print(F("Set Minute: "));

                lcd.setCursor(12, 1);

                lcd.print(minutes);

                delay(500);           

                break;

           case 3:                 //RTC Date Stored

                Press_Up_Dn();

                lcd.print(F("Set Date: "));

                lcd.setCursor(10, 1);

                lcd.print(dates);

                delay(500);           

                break;

           case 4:                 //RTC Month Stored

                Press_Up_Dn();

                lcd.print(F("Set Month: "));

                lcd.setCursor(11, 1);

                lcd.print(months);

                delay(500);           

                break;

           case 5:                 //RTC Year Stored

                Press_Up_Dn();

                lcd.print(F("Set Year: "));

                lcd.setCursor(10, 1);

                lcd.print(years);

                delay(500);           

                break;

           case 6:                 //RTC Day Stored

                Press_Up_Dn();

                lcd.print(F("Set Day: "));

                lcd.setCursor(8, 1);

                lcd.print(day_name[days-1]);

                delay(500);

                break;

           case 7:     

                str = 1;

                prog = 0;

                prog_sel = 0; 

                break;   

           }                           

       }

       //-----------------------------------------

       if (prog == 2 && prog_sel_timer1 == 0)  // Socket_A Day Stored

       {

           prog_sel = prog_sel + 1;

           switch (prog_sel)    

           {

           case 1:               

                Selected_1();               

                lcd.clear();                   

                lcd.print(F("Soc A: Day"));

                lcd.setCursor(0, 1);

                lcd.print(F("Press Up to: Set"));                                   

                delay(500);                          

                break;

           case 2:

                lcd.clear();              

                lcd.print(F("Soc A: Day Saved"));

                lcd.setCursor(0, 1);

                lcd.print(F("-> Sel: Set Time"));               

                delay(1000);

                prog_sel = 0;

                prog_sel_timer1 = 1;              

                break;          

           }            

       }

       if (prog == 2 && prog_sel_timer1 == 1)  // Socket_A On/OFF Stored

       {

           prog_sel = prog_sel + 1;

           switch (prog_sel)

           {

           case 1:              // Socket_A

                Selected_0();               

                lcd.print(F("A-> 1 ON Hr:"));

                lcd.setCursor(14, 1);

                lcd.print(h_on_1A);

                hr_val = h_on_1A;

                delay(500);           

                break;

           case 2:              // Socket_A 1_On Hour Stored

                h_on_1A = hr_val;

                EEPROM.write(21, h_on_1A);

                hr_val = 0;

                Press_Up_Dn();

                lcd.print(F("A-> 1 ON Min:"));

                lcd.setCursor(14, 1);

                lcd.print(m_on_1A);

                min_val = m_on_1A;

                delay(500);           

                break;               

           case 3:              // Socket_A 1_On Minute Stored

                m_on_1A = min_val;

                EEPROM.write(22, m_on_1A);

                min_val = 0;

                Press_Up_Dn();

                lcd.print(F("A-> 1 OFF Hr:"));

                lcd.setCursor(14, 1);

                lcd.print(h_off_1A);

                hr_val = h_off_1A; 

                delay(500);           

                break;

           case 4:              // Socket_A 1_Off Hour Stored

                h_off_1A = hr_val;

                EEPROM.write(23, h_off_1A);

                hr_val = 0;

                Press_Up_Dn();

                lcd.print(F("A-> 1 OFF Min:"));

                lcd.setCursor(14, 1);

                lcd.print(m_off_1A);

                min_val = m_off_1A;

                delay(500);           

                break;

           case 5:              // Socket_A 1_Off Minute Stored

                m_off_1A = min_val;

                EEPROM.write(24, m_off_1A);

                min_val = 0;

                Press_Up_Dn();

                lcd.print(F("A-> 2 ON Hr:"));

                lcd.setCursor(14, 1);

                lcd.print(h_on_2A);

                hr_val = h_on_2A;  

                delay(500);           

                break;

           case 6:              // Socket_A 2_On Hour Stored

                h_on_2A = hr_val;

                EEPROM.write(25, h_on_2A);

                hr_val = 0;

                Press_Up_Dn();

                lcd.print(F("A-> 2 ON Min:"));

                lcd.setCursor(14, 1);

                lcd.print(m_on_2A);

                min_val = m_on_2A;

                delay(500);           

                break;

           case 7:              // Socket_A 2_On Minute Stored

                m_on_2A = min_val;

                EEPROM.write(26, m_on_2A);

                min_val = 0;

                Press_Up_Dn();

                lcd.print(F("A-> 2 OFF Hr:"));

                lcd.setCursor(14, 1);

                lcd.print(h_off_2A);

                hr_val = h_off_2A; 

                delay(500);           

                break;

           case 8:              // Socket_A 2_Off Hour Stored

                h_off_2A = hr_val;

                EEPROM.write(27, h_off_2A);

                hr_val = 0;

                Press_Up_Dn();

                lcd.print(F("A-> 2 OFF Min:"));

                lcd.setCursor(14, 1);

                lcd.print(m_off_2A);

                min_val = m_off_2A;

                delay(500);           

                break;

           case 9:              // Socket_A 2_Off Minute Stored

                m_off_2A = min_val;

                EEPROM.write(28, m_off_2A);

                min_val = 0;                

                delay(500);

                prog_sel = 0;

                str = 1;             

                break;       

           }

       } 

     //------------------------------------------

     if (prog == 3 && prog_sel_timer1 == 0)  // Socket_B Day Stored

       {

           prog_sel = prog_sel + 1;

           switch (prog_sel)    

           {

           case 1:               

                Selected_1();               

                lcd.clear();                   

                lcd.print(F("Soc B: Day"));

                lcd.setCursor(0, 1);

                lcd.print(F("Press Up to: Set"));                                   

                delay(500);                          

                break;

           case 2:

                lcd.clear();              

                lcd.print(F("Soc B: Day Saved"));

                lcd.setCursor(0, 1);

                lcd.print(F("-> Sel: Set Time"));               

                delay(1000);

                prog_sel = 0;

                prog_sel_timer1 = 1;              

                break;              

           }            

       }

       if (prog == 3 && prog_sel_timer1 == 1)  // Socket_B On/OFF Stored

       {

           prog_sel = prog_sel + 1;

           switch (prog_sel)

           {

           case 1:              // Socket_B

                Selected_0();               

                lcd.print(F("B-> 1 ON Hr:"));

                lcd.setCursor(14, 1);

                lcd.print(h_on_1B);

                hr_val = h_on_1B;

                delay(500);           

                break;

           case 2:              // Socket_B 1_On Hour Stored

                h_on_1B = hr_val;

                EEPROM.write(51, h_on_1B);

                hr_val = 0;

                Press_Up_Dn();

                lcd.print(F("B-> 1 ON Min:"));

                lcd.setCursor(14, 1);

                lcd.print(m_on_1B);

                min_val = m_on_1B;

                delay(500);           

                break;                

           case 3:              // Socket_B 1_On Minute Stored

                m_on_1B = min_val;

                EEPROM.write(52, m_on_1B);

                min_val = 0;

                Press_Up_Dn();

                lcd.print(F("B-> 1 OFF Hr:"));

                lcd.setCursor(14, 1);

                lcd.print(h_off_1B);

                hr_val = h_off_1B; 

                delay(500);           

                break;

           case 4:              // Socket_B 1_Off Hour Stored

                h_off_1B = hr_val;

                EEPROM.write(53, h_off_1B);

                hr_val = 0;

                Press_Up_Dn();

                lcd.print(F("B-> 1 OFF Min:"));

                lcd.setCursor(14, 1);

                lcd.print(m_off_1B);

                min_val = m_off_1B;

                delay(500);           

                break;

           case 5:              // Socket_B 1_Off Minute Stored

                m_off_1B = min_val;

                EEPROM.write(54, m_off_1B);

                min_val = 0;

                Press_Up_Dn();

                lcd.print(F("B-> 2 ON Hr:"));

                lcd.setCursor(14, 1);

                lcd.print(h_on_2B);

                hr_val = h_on_2B;  

                delay(500);            

                break;

           case 6:              // Socket_B 2_On Hour Stored

                h_on_2B = hr_val;

                EEPROM.write(55, h_on_2B);

                hr_val = 0;

                Press_Up_Dn();

                lcd.print(F("B-> 2 ON Min:"));

                lcd.setCursor(14, 1);

                lcd.print(m_on_2B);

                min_val = m_on_2B;

                delay(500);           

                break;

           case 7:              // Socket_B 2_On Minute Stored

                m_on_2B = min_val;

                EEPROM.write(56, m_on_2B);

                min_val = 0;

                Press_Up_Dn();

                lcd.print(F("B-> 2 OFF Hr:"));

                lcd.setCursor(14, 1);

                lcd.print(h_off_2B);

                hr_val = h_off_2B; 

                delay(500);           

                break;

           case 8:              // Socket_B 2_Off Hour Stored

                h_off_2B = hr_val;

                EEPROM.write(57, h_off_2B);

                hr_val = 0;

                Press_Up_Dn();

                lcd.print(F("B-> 2 OFF Min:"));

                lcd.setCursor(14, 1);

                lcd.print(m_off_2B);

                min_val = m_off_2B;

                delay(500);           

                break;

           case 9:              // Socket_B 2_Off Minute Stored

                m_off_2B = min_val;

                EEPROM.write(58, m_off_2B);

                min_val = 0;                

                delay(500);

                prog_sel = 0;

                str = 1;             

                break;       

           }

       }

       //------------------------------------------   

     if (prog == 4)       // DC1 Temp Stored

       {

           prog_sel = prog_sel + 1;

           switch (prog_sel)

           {

           case 1:                     

                Selected_0();               

                lcd.print(F("DC1 Temp:"));

                lcd.setCursor(10, 1);

                lcd.print(DC1_Temp);

                lcd.write(byte(0));

                lcd.print(F("C ")); 

                F_val = DC1_Temp;

                delay(500);           

                break;

           case 2:

                DC1_Temp = F_val;                

                EEPROM.write(252, DC1_Temp);

                F_val = 0;

                lcd.clear();  

                lcd.setCursor(0, 1);

                lcd.print(F("DC1 Temp:"));

                lcd.setCursor(10, 1);

                lcd.print(DC1_Temp);

                lcd.write(byte(0));

                lcd.print(F("C "));  

                lcd.setCursor(0, 0);

                lcd.print(F("    Saved       "));                    

                delay(1500);

        prog_sel = 0;

                str = 1;                 

                break;       

           }

       }

       //---------------------------------------

       if (prog == 5)       // Light Timer Stored

       {

           prog_sel = prog_sel + 1;

           switch (prog_sel)

           {

           case 1:           // Light 1

                Selected_0();               

                lcd.print(F("L-> 1 ON Hr:"));

                lcd.setCursor(14, 1);

                lcd.print(h_on_1L);

                hr_val =  h_on_1L;

                delay(500);           

                break;

           case 2:           // Light 1_On Hour Stored

                h_on_1L = hr_val;

                EEPROM.write(201, h_on_1L);

                hr_val = 0;

                Press_Up_Dn();

                lcd.print(F("L-> 1 ON Min:"));

                lcd.setCursor(14, 1);

                lcd.print(m_on_1L);

                min_val = m_on_1L;

                delay(500);           

                break;                

           case 3:           // Light 1_On Minute Stored

                m_on_1L = min_val;

                EEPROM.write(202, m_on_1L);

                min_val = 0;

                Press_Up_Dn();

                lcd.print(F("L-> 1 OFF Hr:"));

                lcd.setCursor(14, 1);

                lcd.print(h_off_1L);

                hr_val =  h_off_1L; 

                delay(500);           

                break;

           case 4:           // Light 1_Off Hour Stored

                h_off_1L = hr_val;

                EEPROM.write(203, h_off_1L);

                hr_val = 0;

                Press_Up_Dn();

                lcd.print(F("L-> 1 OFF Min:"));

                lcd.setCursor(14, 1);

                lcd.print(m_off_1L);

                min_val = m_off_1L;

                delay(500);           

                break;

           case 5:           // Light 1_Off Minute Stored

                m_off_1L = min_val;

                EEPROM.write(204, m_off_1L);

                min_val = 0;

                Press_Up_Dn();

                lcd.print(F("L-> 2 ON Hr:"));

                lcd.setCursor(14, 1);

                lcd.print(h_on_2L);

                hr_val =  h_on_2L;  

                delay(500);           

                break;                

           case 6:              // Light 2_On Hour Stored

                h_on_2L = hr_val;

                EEPROM.write(205, h_on_2L);

                hr_val = 0;

                Press_Up_Dn();

                lcd.print(F("L-> 2 ON Min:"));

                lcd.setCursor(14, 1);

                lcd.print(m_on_2L);

                min_val = m_on_2L;

                delay(500);           

                break;

           case 7:              // Light 2_On Minute Stored

                m_on_2L = min_val;

                EEPROM.write(206, m_on_2L);

                min_val = 0;

                Press_Up_Dn();

                lcd.print(F("L-> 2 OFF Hr:"));

                lcd.setCursor(14, 1);

                lcd.print(h_off_2L);

                hr_val = h_off_2L; 

                delay(500);           

                break;

           case 8:              // Light 2_Off Hour Stored

                h_off_2L = hr_val;

                EEPROM.write(207, h_off_2L);

                hr_val = 0;

                Press_Up_Dn();

                lcd.print(F("L-> 2 OFF Min:"));

                lcd.setCursor(14, 1);

                lcd.print(m_off_2L);

                min_val = m_off_2L;

                delay(500);           

                break;

           case 9:              // Light 2_Off Minute Stored

                m_off_2L = min_val;

                EEPROM.write(208, m_off_2L);

                min_val = 0;                

                delay(500);

                prog_sel = 0;

                str = 1;             

                break;     

           }

       }     

     //---------------------------------------

       if (prog == 8)       // Rain Timer Stored

       {

           prog_sel = prog_sel + 1;

           switch (prog_sel)

           {

           case 1:           // Rain

                Selected_0();               

                lcd.print(F("F-> 1 ON Hr:"));

                lcd.setCursor(14, 1);

                lcd.print(h_on_1F);

                hr_val =  h_on_1F;

                delay(500);           

                break;

           case 2:           // Rain 1_On Hour Stored

                h_on_1F = hr_val;

                EEPROM.write(221, h_on_1F);

                hr_val = 0;

                Press_Up_Dn();

                lcd.print(F("F-> 1 ON Min:"));

                lcd.setCursor(14, 1);

                lcd.print(m_on_1F);

                min_val = m_on_1F;

                delay(500);           

                break;           

           case 3:           // Rain 1_On Minute Stored

                m_on_1F = min_val;

                EEPROM.write(222, m_on_1F);

                min_val = 0;

                Press_Up_Dn();

                lcd.print(F("F-> 2 ON Hr:"));

                lcd.setCursor(14, 1);

                lcd.print(h_on_2F);

                hr_val = h_on_2F;

                delay(500);           

                break;

       case 4:           // Rain 2_On Hour Stored

                h_on_2F = hr_val;

                EEPROM.write(223, h_on_2F);

                hr_val = 0;

                Press_Up_Dn();

                lcd.print(F("F-> 2 ON Min:"));

                lcd.setCursor(14, 1);

                lcd.print(m_on_2F);

                min_val = m_on_2F;

                delay(500);           

                break;     

       case 5:           // Rain 2_On Minute Stored

                m_on_2F = min_val;

                EEPROM.write(224, m_on_2F);

                min_val = 0;             

                delay(500);

                prog_sel = 0;

                str = 1;           

                break;     

           }

       }

       //---------------------------------------

       if (prog == 9)       // Reset

       {

           prog_sel = prog_sel + 1;

           switch (prog_sel)

           {

           case 1:

                lcd.clear();

        lcd.setCursor(1, 0);

                lcd.print(F("Press Sel to:"));

                lcd.setCursor(4, 1);

                lcd.print(F("Confirm"));

                delay(1000);       

                break;

           case 2:

                lcd.clear();

                lcd.setCursor(2, 0);  

                lcd.print(F("Please Wait"));               

                for (byte i = 220; i > 0; i = i - 1)

                {

                   //EEPROM.update(i, 0);

                     lcd.setCursor(7, 1);

                     lcd.print(i);

                     lcd.print(F("   "));          

                     delay(50);                    

                }

                lcd.clear();

                lcd.setCursor(5, 0);       

                lcd.print(F("Reset"));

                lcd.setCursor(3, 1);

                lcd.print(F("Successful"));

                delay(1000);       

                prog_sel = 0;

                str = 1;               

                break; 

           }

       }               

   }

}
Video

Have any question realated to this Article?

Ask Our Community Members