Programación de electrovalvulas en bucles de encendido de 10 min y apagado de 1 hora

Se supone, o mejor dicho la idea inicial es que mis tres electrovalvulas desde las 7:00 hasta las 18:00 en intervalos de una hora se enciendan 10 minutos, estoy bastante verde en esto de arduino y vainas, pero bueno, cosas que se deben hacer. Tengo este codigo:

#include <TimeLib.h>

#define NUMERO_DE_ELECTROVALVULAS 3 // Número de electroválvulas
#define PINES_ELECTROVALVULAS {8, 9, 10} // Pines de control de las electroválvulas
#define TIEMPO_DE_ENCENDIDO 600000  // Tiempo de encendido en milisegundos (10 minutos)
#define TIEMPO_DE_APAGADO 3600000   // Tiempo de apagado en milisegundos (1 hora)

void setup() {
  // Inicializa los pines de control de las electroválvulas como salidas
  for (int i = 0; i < NUMERO_DE_ELECTROVALVULAS; i++) {
    pinMode(PINES_ELECTROVALVULAS[i], OUTPUT);
  }

  // Inicializa la comunicación serial
  Serial.begin(9600);

  // Inicializa el reloj
  setTime(7, 0, 0, 1, 1, 2022); // Establece la hora inicial del reloj a las 7:00 AM (opcional)
}

void loop() {
  int horaActual = hour();
  int minutoActual = minute();

  // Verifica si es hora de encender alguna electroválvula
  for (int i = 0; i < NUMERO_DE_ELECTROVALVULAS; i++) {
    int horaInicio = 7 + i; // Hora de inicio para cada electroválvula
    int horaFin = 18 + i;   // Hora de finalización para cada electroválvula

    if (horaActual >= horaInicio && horaActual < horaFin) {
      // Calcula el tiempo transcurrido en segundos desde el inicio de la hora de inicio
      int segundosTranscurridos = (horaActual - horaInicio) * 3600 + minutoActual * 60;
      
      // Verifica si la electroválvula debe estar encendida o apagada en este momento
      if (segundosTranscurridos % (TIEMPO_DE_ENCENDIDO + TIEMPO_DE_APAGADO) < TIEMPO_DE_ENCENDIDO) {
        digitalWrite(PINES_ELECTROVALVULAS[i], HIGH); // Enciende la electroválvula
        Serial.print("Electroválvula ");
        Serial.print(i + 1);
        Serial.println(" encendida.");
      } else {
        digitalWrite(PINES_ELECTROVALVULAS[i], LOW); // Apaga la electroválvula
        Serial.print("Electroválvula ");
        Serial.print(i + 1);
        Serial.println(" apagada.");
      }
    }
  }

  // Espera un segundo antes de volver a comprobar
  delay(1000); // 1 segundo
}

y me sale el error de "Compilation error: expected ')' before '[' token" en las lineas 11, 36 y 41. Y sinceramente no lo entiendo.

alguien me puede explicar por que pasa?

Su publicacion se MUEVE a su ubicacion actual ya que es mas adecuada.

1 Like

Cambia esto:

#define PINES_ELECTROVALVULAS {8, 9, 10} // Pines de control de las electroválvulas

Por esto:

int PINES_ELECTROVALVULAS[]={8, 9, 10};

Esto corrige solamente los problemas de compilación.


Por ahí andan algunos problemas de aritmética entera (integer overflow). Asegúrate de que todas las operaciones aritméticas sean hechas en el mundo de long en lugar de int. Puedes usar Serial.print() para comprobar que los resultados de todas las operaciones son los que estás esperando.

Luego hay que ver otros detalles, como por ejemplo me parece que en alguna parte estás comparando segundos con milisegundos.

Si tu proyecto maneja las válvulas en intervalos de minutos sería más simple usar minutos que segundos o milisegundos...

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.