#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());
}