#include "RTClib.h"
#include "DHT.h"
#define DHTPIN 8     
#define DHTTYPE DHT22 
DHT dht(DHTPIN, DHTTYPE);
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR    0x27
#define LCD_COLUMNS 20
#define LCD_LINES   4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
String data;
int relay1=3;
int relay2=4;
int relay3=5;
int relay4=6;
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void setup()
   { {
  Serial.begin(115200);
  Serial.println(F("DHT22 example!"));
  dht.begin();
    }
{
  Serial.begin(115200);
   lcd.init();
  lcd.backlight();
  lcd.setCursor(3,0);
  lcd.print("welcome to");
  lcd.setCursor(2,1);
  lcd.print("Zunair's Smart Irrigation System");
  delay(4000);
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(relay4, OUTPUT);
  Serial.println("welcome to my project");
  delay(500);
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    Serial.flush();
    abort();
  }
  lcd.clear();
  
}
   }
 
void loop () {
   {
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();
  // Check if any reads failed and exit early (to try again).
  if (isnan(temperature) || isnan(humidity)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }
  Serial.print(F("Humidity: "));
  Serial.print(humidity);
  Serial.print(F("%  Temperature: "));
  Serial.print(temperature);
  Serial.println(F("°C "));
  lcd.setCursor(0,3);
    lcd.print("temp:");
    lcd.println(temperature);
    lcd.setCursor(10,3);
    lcd.print("hum:");
    lcd.println(humidity);
  delay(2000);
}
  
  
  DateTime now = rtc.now();
  
  Serial.print("Current time: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
  Serial.println();
  delay(3000);
  lcd.setCursor(3,0);
  lcd.print("Time:");
  lcd.print(now.hour(), DEC);
  lcd.print(':');
  lcd.print(now.minute(), DEC);
  lcd.print(':');
  lcd.print(now.second(), DEC);
  if((now.second()> 1) && (now.second()<15))
  {
  lcd.setCursor(0,1);
  lcd.print("Relay1:ON ");
   Serial.println("relay1 is on");
   digitalWrite(relay1, HIGH);
  }
  else{
    lcd.setCursor(0,1);
    lcd.print("Relay1:Off");
    digitalWrite(relay1,LOW);
  }
  
   if((now.second()> 20) && (now.second()<30))
  {
  lcd.setCursor(10,1);
  lcd.print("Relay2:ON ");
   Serial.println("relay2 is on");
   digitalWrite(relay2, HIGH);
  }
  else{
   lcd.setCursor(10,1);
  lcd.print("Relay2:OFF");
  digitalWrite(relay2,LOW);
  }
  if((now.second()> 35) && (now.second()<45))
  {
   lcd.setCursor(0,2);
  lcd.print("Relay3:ON ");
   Serial.println("relay3 is on");
   digitalWrite(relay3, HIGH);
  }
  else{
    lcd.setCursor(0,2);
  lcd.print("Relay3:OFF");
  digitalWrite(relay3,LOW);
  }
   if((now.second()> 50) && (now.second()<59))
  {
    lcd.setCursor(10,2);
  lcd.print("Relay4:ON ");
   Serial.println("relay4 is on");
   digitalWrite(relay4, HIGH);
  }
  else{
    lcd.setCursor(10,2);
  lcd.print("Relay4:OFF");
  digitalWrite(relay4,LOW);
  }
 
 
 
}