Código de Automatización de relés por ciclos

Hola a todos.

Estoy desarrollando un pequeño proyecto con Arduino UNO.

Este es mi primer acercamiento a la programación y mi intención es controlar 2 relés en 3 distintos ciclos.

En mi programación pretendo iniciar el proceso al presionar un botón.

Esto dará comienzo al primer ciclo (Ciclo 1) en el cual, un relé se mantendrá 18 horas apagado, y 6 horas encendido y el otro deberá prender durante 150 segundos y estar pagado el resto del día.
Este ciclo se repetirá 14 veces.

Al terminar el Ciclo 1, dará comienzo el Ciclo 2 en el cual, un relé se mantendrá 12 horas apagado, y 12 horas encendido y el otro deberá prender durante 250 segundos y estar pagado el resto del día.
Este ciclo se repetirá 70 veces.

Al terminar el Ciclo 2, dará comienzo el Ciclo 3 en el cual, un relé se mantendrá 12 horas apagado, y 12 horas encendido y el otro deberá prender durante 150 segundos y estar pagado el resto del día.
Este ciclo se repetirá 7 veces.

Mis dudas son:

  1. ¿Consideran que el código que tengo me servirá, voy por buen camino? Lo escribí usando partes de distintos ejemplos y aunque no muestra errores de compilación agradecería la opinión de alguien con experiencia.

  2. ¿Será posible mostrar toda esta información en un pantalla LCD? Me gustaría añadir también temperatura y humedad.

  3. ¿Será posible agregar un LED que indique en que ciclo se encuentra el programa?

#include <GFButton.h>

const int RelayG_pin = 3; //pin donde se conecta el Relay G
const int RelayW_pin = 4; //pin donde se conecta el Relay W
GFButton buttonOn = 5;  

bool primerCiclo = true; //para saber cuándo es la primera vez del Ciclo 1
bool segundoCiclo = true; //para saber cuándo es la primera vez del Ciclo 2
bool tercerCiclo = true; //para saber cuándo es la primera vez del Ciclo 3

void setup() {
  Serial.begin(9600);                // inicia serial
  pinMode(RelayG_pin, OUTPUT);       // set arduino pin to output mode
}

void loop(){
  // Check if "on" button is pressed
  if (buttonOn.isPressed()) {
    Serial.println("Let's start!!!");
    // Iniciar ciclo 1
    primerCiclo = false;
    }

  // el primer ciclo debera repetirse 14 veces
  if (primerCiclo){
    primerCiclo = false; //ya no sera más la primera vez
    for (int i = 0; i<14; i=i+1){
      Serial.println("LIGHT ON - GROW CYCLE");
      delay(6480000); //mantener 18 horas 
      digitalWrite(RelayG_pin,HIGH); //ENCENDER RELAY G
      delay(6480000); //mantener 18 horas 
      Serial.println("LIGHT OFF - GROW CYCLE");
      delay(2160000); //mantener 6 horas
      digitalWrite(RelayG_pin,LOW); //APAGAR RELAY G
      delay(2160000); //mantener 6 horas
      segundoCiclo = false;
    }
  }
    else if (primerCiclo){
    primerCiclo = false; //ya no sera más la primera vez
    for (int i = 0; i<70; i=i+1){
      Serial.println("WATER ON - GROW CYCLE");
      delay(15000); //mantener 150 segundos 
      digitalWrite(RelayW_pin,HIGH); //ENCENDER RELAY W
      delay(15000); //mantener 150 segundos 
      Serial.println("WATER OFF - GROW CYCLE");
      delay(500); //mantener 5 segundos 
      digitalWrite(RelayW_pin,LOW); //APAGAR RELAY W
      delay(8625000); //mantener 86250 segundos     
    }
  
 // el segundo ciclo debera repetirse 70 veces
 if (segundoCiclo){
    segundoCiclo = false; //ya no sera más la primera vez
    for (int i = 0; i<70; i=i+1){
      Serial.println("LIGHT ON - BLOOM CYCLE");
      delay(4320000); //mantener 12 horas
      digitalWrite(RelayG_pin,HIGH); //ENCENDER RELAY
      delay(4320000); //mantener 12 horas 
      Serial.println("LIGHT OFF - BLOOM CYCLE");
      delay(4320000); //mantener 12 horas
      digitalWrite(RelayG_pin,LOW); //APAGAR RELAY
      delay(4320000); //mantener 12 horas
      Serial.println("ALMOST THERE - CHANGE TO CLEAN WATER!!!");
      delay(10000); //mantener 100 segundos
    } 
 }else if (segundoCiclo){
    segundoCiclo = false; //ya no sera más la primera vez
    for (int i = 0; i<70; i=i+1){
      Serial.println("WATER ON - BLOOM CYCLE");
      delay(25000); //mantener 250 segundos 
      digitalWrite(RelayW_pin,HIGH); //ENCENDER RELAY W
      delay(25000); //mantener 250 segundos 
      Serial.println("WATER OFF - BLOOM CYCLE");
      delay(500); //mantener 5 segundos 
      digitalWrite(RelayW_pin,LOW); //APAGAR RELAY W
      delay(8615000); //mantener 86150 segundos  
      tercerCiclo = false;   
    }
  }  
  if (tercerCiclo){   
    tercerCiclo = false; //ya no sera más la primera vez
    for (int i = 0; i<4; i=i+1){
      Serial.println("LIGHT ON - HARVEST CYCLE");
      delay(4320000); //mantener 12 horas
      digitalWrite(RelayG_pin,HIGH); //ENCENDER RELAY
      delay(4320000); //mantener 12 horas 
      Serial.println("LIGHT OFF - HARVEST CYCLE");
      delay(4320000); //mantener 12 horas
      digitalWrite(RelayG_pin,LOW); //APAGAR RELAY
      delay(4320000); //mantener 12 horas
      Serial.println("HARVEST TIME!!!");
      delay(10000); //mantener 100 segundos
    } 
  }else if (tercerCiclo){   
    tercerCiclo = false; //ya no sera más la primera vez
    for (int i = 0; i<7; i=i+1){
      Serial.println("WATER ON - HARVEST CYCLE");
      delay(15000); //mantener 150 segundos 
      digitalWrite(RelayW_pin,HIGH); //ENCENDER RELAY W
      delay(15000); //mantener 150 segundos 
      Serial.println("WATER OFF - HARVEST CYCLE");
      delay(500); //mantener 5 segundos 
      digitalWrite(RelayW_pin,LOW); //APAGAR RELAY W
      delay(8615000); //mantener 86150 segundos     
    }
   }
  }
}

Muchas gracias!

**Moderador:**Hola, bienvenido al foro Arduino.
En la sección proyectos tienes estos dos hilos que debiste haber leído antes de postear

Como tu consulta es para otra sección lo muevo a Software.

Normas del foro