#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
//#include <TimeAlarms.h>
#include "TimeAlarms.h"
//#include <Time.h>
#include <TimeLib.h>
#include <DS1307RTC.h>
#define bomba 5

// introduce segundos de riego 1-59
int TR = 15; //TIEMPO DE RETRASO

void setup() {
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Hora:");
  Serial.begin(9600);


  //Pines de salida a los relevadores
  pinMode(bomba, OUTPUT);
  digitalWrite(bomba, HIGH);

  pinMode(8, OUTPUT);
  digitalWrite(8, HIGH);

  pinMode(7, OUTPUT);
  digitalWrite(7, HIGH );

  pinMode(6, OUTPUT);
  digitalWrite(6, HIGH);


  // Set time fija el horario inicial del reloj (HH:MM:SS:DD:MM:YY)  sólo una vez
  setTime(11, 35, 45, 20, 7, 23);
  RTC.set(now());

  setSyncProvider(RTC.get);
  if (timeStatus() != timeSet)
    Serial.println("Fallo de RTC");

  else
    Serial.println("Sincronizado con RTC");
  // Crear las alarmas (HH:MM:SS:FUNCIÓN)
  //Horas de Válvula 1
  
  Alarm.alarmRepeat(11, 36, 0, EV1ON);  
  Alarm.alarmRepeat(11, 36, TR, EV1OFF);  
  
  Alarm.alarmRepeat(11, 37, 30, EV1ON);  
  Alarm.alarmRepeat(11, 37, 30 + TR, EV1OFF);  
  
  Alarm.alarmRepeat(11, 39, 30, EV1ON);  
  Alarm.alarmRepeat(11, 39, 30 + TR, EV1OFF);


  //Horas de la Válvula 2
  
  Alarm.alarmRepeat(11, 36, 30, EV2ON);  
  Alarm.alarmRepeat(11, 36, 30 + TR, EV2OFF);  
  
  Alarm.alarmRepeat(11, 38, 0, EV2ON);  
  Alarm.alarmRepeat(11, 38, TR, EV2OFF);  
  
  Alarm.alarmRepeat(11, 39, 0, EV2ON);  
  Alarm.alarmRepeat(11, 39, TR, EV2OFF);
  

//Horas de la Válvula 3    

  Alarm.alarmRepeat(11, 37, 0, EV3ON);  
  Alarm.alarmRepeat(11, 37, TR, EV3OFF);  
  
  Alarm.alarmRepeat(11, 38, 30, EV3ON);  
  Alarm.alarmRepeat(11, 38, 30 + TR, EV3OFF);  
  
  Alarm.alarmRepeat(11, 39, 0, EV3ON);  
  Alarm.alarmRepeat(11, 39, TR, EV3OFF);


}

void loop() {
  // Mostrar el reloj en el monitor serial
  digitalClockDisplay();
  LCDClockDisplay();


  // Esperar 1 segundo y procesar las Alarmas mientras tanto...
  // El metodo Alarm.delay() procesa en el fondo las alarmas y llamara a las funciones indicadas
  Alarm.delay(1000);

  delay(1);

}

//Encendido electroválvula 1
void EV1ON()
{
  digitalWrite(8, LOW);
  Serial.println("EV Pin8 ON - Bomba ON");
  digitalWrite(bomba, LOW);
}
//Apagado electroválvula 1
void EV1OFF()
{
  digitalWrite(bomba, HIGH);
  Serial.println("EV Pin8 OFF - Bomba OFF");
  digitalWrite(8, HIGH);
}

void EV2ON()
{
  digitalWrite(7, LOW);
  Serial.println("EV Pin7 ON - Bomba ON");
  digitalWrite(bomba, LOW);
}

void EV2OFF()
{
  digitalWrite(bomba, HIGH);
  Serial.println("EV Pin7 OFF - Bomba OFF");
  digitalWrite(7, HIGH);
}

void EV3ON()
{
  digitalWrite(6, LOW);
  Serial.println("EV Pin6 ON - Bomba ON");
  digitalWrite(bomba, LOW);
}
void EV3OFF()
{
  digitalWrite(bomba, HIGH);
  Serial.println("EV Pin6 OFF - Bomba OFF");
  digitalWrite(6, HIGH);
}

//   Funciones para la impresión de la hora
void digitalClockDisplay() {
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.println();
}

void printDigits(int digits) {
  Serial.print(":");
  if (digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

void printDigitsLCD(int digits) {
  lcd.print(":");
  if (digits < 10)
    lcd.print('0');
  lcd.print(digits);
}


void LCDClockDisplay() {
  // digital clock display of the time
  lcd.setCursor(0, 1);
  lcd.print(hour());
  printDigitsLCD(minute());
  printDigitsLCD(second());

}
GND5VSDASCLSQWRTCDS1307+
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module