I cant remove the delay, it is there for water pressure purpose. Thats why I would like to know if there is like an if function but that is constantly veryfying the condition.
#include <RTClib.h>
#include <Wire.h>
RTC_DS3231 rtc;
#include <EEPROM.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,6,5,4,3,2); // VSS,GND VDD,+5V VO,BRILLO A GND CON RESISTENCIA RS,7 RW,GND E,6 D4,5 D5,4 D6,3 D7,2 A,5V 220.Ohm K,GND
int function = 28;
int automatico = 27;
int vera_confirm = 26;
int vera = 25;
int manual = 24;
int bajar_tiempo = 23;
int subir_tiempo = 22;
int manual_light = 12;
int vera_light = 11;
int sprinkler_1 = 10;
int sprinkler_2 = 9;
int sprinkler_3 = 8;
int minutos = 15; // minutos
int tiempo_restante = minutos;
int vera_repeat = 0;
int hora_auto = 17;
int minuto_auto = 30;
int count_auto = 0;
void setup() {
rtc.begin();
Wire.begin();
lcd.begin(16,2);
EEPROM.get(0, minutos);
EEPROM.get(2, hora_auto);
EEPROM.get(4, minuto_auto);
pinMode(sprinkler_1, OUTPUT);
pinMode(sprinkler_2, OUTPUT);
pinMode(sprinkler_3, OUTPUT);
pinMode(automatico, INPUT);
pinMode(vera, INPUT);
pinMode(manual, INPUT);
pinMode(subir_tiempo, INPUT);
pinMode(bajar_tiempo, INPUT);
// rtc.adjust(DateTime(__DATE__, __TIME__)); //Una vez para setearle la hora al modulo rtc
}
void loop() {
delay(100);
lcd.clear();
lcd.setCursor(3,0);
lcd.print("SELECCIONE");
lcd.setCursor(6,1);
lcd.print("MODO");
//MANUAL
while (digitalRead(manual) == HIGH){
lcd.clear();
lcd.setCursor(2,0);
lcd.print("RIEGO MANUAL");
lcd.setCursor(4,1);
lcd.print("ACTIVO");
digitalWrite(manual_light, HIGH);
digitalWrite(sprinkler_1, HIGH);
delay(1000);
digitalWrite(sprinkler_1, LOW);
digitalWrite(sprinkler_2, HIGH);
delay(1000);
digitalWrite(sprinkler_2, LOW);
digitalWrite(sprinkler_3, HIGH);
delay(1000);
digitalWrite(sprinkler_3, LOW);
}
if (digitalRead(manual) == LOW){
digitalWrite(sprinkler_1, LOW);
digitalWrite(sprinkler_2, LOW);
digitalWrite(sprinkler_3, LOW);
digitalWrite(manual_light, LOW);
}
//VERA
if (digitalRead(vera_confirm) == HIGH){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("VERA SELECIONADO");
lcd.setCursor(3,1);
lcd.print(minutos);
lcd.print(" MINUTOS");
digitalWrite(vera_light, HIGH);
delay(100);
if (digitalRead(subir_tiempo) == HIGH){
minutos++;
minutos++;
minutos++;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(minutos);
lcd.print(" MINUTOS");
lcd.setCursor(0,1);
lcd.print("TIEMPO CAMBIADO");
EEPROM.put(0, minutos);
delay(100);
}
if (digitalRead(bajar_tiempo) == HIGH){
minutos--;
minutos--;
minutos--;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(minutos);
lcd.print(" MINUTOS");
lcd.setCursor(0,1);
lcd.print("TIEMPO CAMBIADO");
EEPROM.put(0, minutos);
delay(100);
}
if (digitalRead(vera) == HIGH and vera_repeat == 0){
int vera_repeat = 1;
int tiempo_restante = minutos;
int ciclos_riego = minutos / 3; //cantidad de ciclos del riego
for (int i = 0; i < ciclos_riego; i++){
delay(100);
digitalWrite(sprinkler_1, HIGH);
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(tiempo_restante--);
lcd.print(" MINUTOS");
lcd.setCursor(0,1);
lcd.print("RESTANTES");
digitalWrite(sprinkler_1, LOW);
digitalWrite(sprinkler_2, HIGH);
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(tiempo_restante--);
lcd.print(" MINUTOS");
lcd.setCursor(0,1);
lcd.print("RESTANTES");
digitalWrite(sprinkler_2, LOW);
digitalWrite(sprinkler_3, HIGH);
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(tiempo_restante--);
lcd.print(" MINUTOS");
lcd.setCursor(0,1);
lcd.print("RESTANTES");
digitalWrite(sprinkler_3, LOW);
}
}
}
if (digitalRead(vera_confirm) == LOW){
digitalWrite(vera_light, LOW);
}
//AUTOMATICO
if (digitalRead(automatico) == HIGH){
int count_auto = 0;
DateTime fecha = rtc.now();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("AUTO SELECIONADO");
lcd.setCursor(0,1);
lcd.print(fecha.hour());
lcd.print(":");
lcd.print(fecha.minute());
digitalWrite(vera_light, HIGH);
digitalWrite(manual_light, HIGH);
delay(100);
if (digitalRead(subir_tiempo) == HIGH){
minutos++;
minutos++;
minutos++;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(minutos);
lcd.print(" MINUTOS");
lcd.setCursor(0,1);
lcd.print("TIEMPO CAMBIADO");
EEPROM.put(0, minutos);
delay(100);
}
if (digitalRead(bajar_tiempo) == HIGH){
minutos--;
minutos--;
minutos--;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(minutos);
lcd.print(" MINUTOS");
lcd.setCursor(0,1);
lcd.print("TIEMPO CAMBIADO");
EEPROM.put(0, minutos);
delay(100);
}
if (digitalRead(function) == HIGH and count_auto == 0){
count_auto++;
while (count_auto == 1){
delay(300);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("MODIFICAR HORA");
lcd.setCursor(0,1);
lcd.print(hora_auto);
lcd.print(":");
lcd.print(minuto_auto);
if (digitalRead(subir_tiempo) == HIGH){
hora_auto++;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("HORA CAMBIADA");
lcd.setCursor(0,1);
lcd.print(hora_auto);
lcd.print(":");
lcd.print(minuto_auto);
EEPROM.put(2, hora_auto);
delay(100);
}
if (digitalRead(bajar_tiempo) == HIGH){
hora_auto--;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("HORA CAMBIADA");
lcd.setCursor(0,1);
lcd.print(hora_auto);
lcd.print(":");
lcd.print(minuto_auto);
EEPROM.put(2, hora_auto);
delay(100);
}
if (digitalRead(function) == HIGH){
count_auto++;
while (count_auto == 2){
delay(300);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("MODIFICAR MINUTOS");
lcd.setCursor(0,1);
lcd.print(hora_auto);
lcd.print(":");
lcd.print(minuto_auto);
if (digitalRead(subir_tiempo) == HIGH){
minuto_auto++;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("MINUTOS CAMBIADOS");
lcd.setCursor(0,1);
lcd.print(hora_auto);
lcd.print(":");
lcd.print(minuto_auto);
EEPROM.put(4, minuto_auto);
delay(100);
}
if (digitalRead(bajar_tiempo) == HIGH){
minuto_auto--;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("MINUTOS CAMBIADOS");
lcd.setCursor(0,1);
lcd.print(hora_auto);
lcd.print(":");
lcd.print(minuto_auto);
EEPROM.put(4, minuto_auto);
delay(100);
}
if (digitalRead(function) == HIGH){
count_auto--;
count_auto--;
delay(100);
}
}
}
}
}
//Auto con RTC
if (fecha.hour() == hora_auto and fecha.minute() == minuto_auto){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("CORRE RUTINA");
int tiempo_restante = minutos;
int ciclos_riego = minutos / 3;
for (int i = 0; i < ciclos_riego; i++){
delay(100);
digitalWrite(sprinkler_1, HIGH);
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(tiempo_restante--);
lcd.print(" MINUTOS");
lcd.setCursor(0,1);
lcd.print("RESTANTES");
digitalWrite(sprinkler_1, LOW);
digitalWrite(sprinkler_2, HIGH);
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(tiempo_restante--);
lcd.print(" MINUTOS");
lcd.setCursor(0,1);
lcd.print("RESTANTES");
digitalWrite(sprinkler_2, LOW);
digitalWrite(sprinkler_3, HIGH);
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(tiempo_restante--);
lcd.print(" MINUTOS");
lcd.setCursor(0,1);
lcd.print("RESTANTES");
digitalWrite(sprinkler_3, LOW);
}
}
}
}
full code here