// LCD1602 to Arduino Uno connection example
#include <LiquidCrystal.h>
#include "RTClib.h"
//Creación de instancia de RTC
RTC_DS1307 rtc;
//Creación de instancia de LCD
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
//Definición de pines para leds de control
int ledRojo = 0;
int ledVerde = 1;
//Definición de pines para solenoides
int sol1 = 2;
int sol2 = 3;
int sol3 = 4;
int sol4 = 5;
int sol5 = 6;
int sol6 = 7;
//Parametrización de duraciones de ciclos (en minutos)
int C1 = 5;
int C2 = 1;
int C3 = 1;
int C4 = 1;
int C5 = 1;
int C6 = 1;
//Variables de apoyo para sentencias While
int T2 = C1 + C2;
int T3 = T2 + C3;
int T4 = T3 + C4;
int T5 = T4 + C5;
int T6 = T5 + C6;
void setup() {
lcd.begin(16, 2);
if (! rtc.begin()) {
lcd.print("Couldn't find RTC");
abort();
}
int minuto = 0; //Simulación de hora. Eliminar cuando se use el RTC
pinMode(sol6, OUTPUT);
pinMode(sol5, OUTPUT);
pinMode(sol4, OUTPUT);
pinMode(sol3, OUTPUT);
pinMode(sol2, OUTPUT);
pinMode(sol1, OUTPUT);
pinMode(ledVerde, OUTPUT);
pinMode(ledRojo, OUTPUT);
digitalWrite(ledRojo, HIGH);
digitalWrite(ledVerde, LOW);
}
void loop() {
DateTime now = rtc.now();
int hora = now.hour();
//int minuto = now.minute();
int minuto;
int segundo = now.second();
if(hora == 6){
while (minuto < C1){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Regando C1...");
lcd.setCursor(0,1);
lcd.print(minuto);
digitalWrite(sol1, HIGH);
digitalWrite(ledRojo, LOW);
ledVerdeON();
minuto++;
}
while (minuto < T2){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Regando C2...");
lcd.setCursor(0,1);
lcd.print(60-segundo);
digitalWrite(sol1, LOW);
digitalWrite(sol2, HIGH);
digitalWrite(ledRojo, LOW);
ledVerdeON();
minuto++;
}
while (minuto < T3){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Regando C3...");
lcd.setCursor(0,1);
lcd.print(60-segundo, DEC);
digitalWrite(sol2, LOW);
digitalWrite(sol3, HIGH);
digitalWrite(ledRojo, LOW);
ledVerdeON();
minuto++;
}
while (minuto < T4){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Regando C4...");
lcd.setCursor(0,1);
lcd.print(minuto);
lcd.print(":");
lcd.print(segundo);
digitalWrite(sol3, LOW);
digitalWrite(sol4, HIGH);
digitalWrite(ledRojo, LOW);
ledVerdeON();
minuto++;
}
while (minuto < T5){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Regando C5...");
lcd.setCursor(0,1);
lcd.print(minuto);
lcd.print(":");
lcd.print(segundo);
delay(1000);
digitalWrite(sol4, LOW);
digitalWrite(sol5, HIGH);
digitalWrite(ledRojo, LOW);
ledVerdeON();
minuto++;
}
while (minuto < T6){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Regando C6...");
lcd.setCursor(0,1);
lcd.print(minuto);
lcd.print(":");
lcd.print(segundo);
delay(1000);
digitalWrite(sol5, LOW);
digitalWrite(sol6, HIGH);
digitalWrite(ledRojo, LOW);
ledVerdeON();
minuto++;
}
} else {
lcd.print(hora, DEC);
lcd.print(':');
lcd.print(minuto, DEC);
lcd.print(':');
lcd.print(segundo, DEC);
delay(1000);
lcd.clear();
}
}
void ledVerdeON() {
digitalWrite(ledVerde, HIGH);
delay(500);
digitalWrite(ledVerde, LOW);
delay(500);
}