Control remoto de cinta transportadora y control de electrovalvulas

Hola a todos,

Estoy haciendo un proyecto que consiste en prender y apagar con 2 pulsadores una cinta transportadora de ingredientes que en su extremo tiene un caño el cual carga el ingrediente en 4 recipientes, en el control, con 4 botones se comanda esos movimiento, dependiendo en que sector de recipiente esta, para hacer la carga del ingrediente, la cinta transportadora tiene en su base un motor que se mueve a los lados para que los ingredientes caigan en un recipiente de adelante o de atras.
Mas o menos eso es lo que quiero hacer, envio el codigo de lo que seria el control remoto, anda bien el tema es que no logro encontrar como seguir desde ahi ya que tengo que hacer que cuando se aprete un pulsador del control se mueva la boca de la cinta para arriba o para abajo y, dependiendo tambien, de que pulsador se apriete, se mueva para los laterales la cinta, cabe destacar que el movimiento de la cinta a sus laterales es por un motor.
El codigo:

#define PulsadorA 4
#define PulsadorB 5
#define PulsadorC 6
#define PulsadorD 7
#define ReleE 13
#define ReleF 3
#define ReleG 8
#define ReleH 11
 int RELE = 9;
 int Pulsador1 = 2;
 int Pulsador2 = 10;
 int inicio = 0;
 int estadoAC = 0;
 int estadoAN = 0;
  int inicio1 = 0;
 int estadoAC1 = 0;
 int estadoAN1 = 0;
  int inicio2 = 0;
 int estadoAC2 = 0;
 int estadoAN2 = 0;
  int inicio3 = 0;
 int estadoAC3 = 0;
 int estadoAN3 = 0;

 void setup () {
  pinMode (ReleE, OUTPUT);
  pinMode (ReleF, OUTPUT);
  pinMode (ReleG, OUTPUT);
  pinMode (ReleH, OUTPUT);
  pinMode (RELE, OUTPUT);
  pinMode (PulsadorA, INPUT);
  pinMode (PulsadorB, INPUT);
  pinMode (PulsadorC, INPUT);
  pinMode (PulsadorD, INPUT);
  pinMode (Pulsador1,INPUT);
  pinMode (Pulsador2,INPUT);  
  
  
  }

 void loop (){
  
  if(digitalRead(Pulsador1) == HIGH){
    digitalWrite (RELE, HIGH);
  }
  else if (digitalRead(Pulsador2) == HIGH){
    digitalWrite(RELE, LOW);
  } 
    estadoAC = digitalRead (PulsadorA);
  if (estadoAC && estadoAN == 0){
    inicio = 1 - inicio;
    delay (100);
  }
  estadoAN = estadoAC;
  if (inicio == 1)
  digitalWrite (ReleE, LOW);
  else 
  digitalWrite (ReleE,HIGH);{
    estadoAC1 = digitalRead (PulsadorB);
    if (estadoAC1 && estadoAN1 == 0){
      inicio1 = 1 - inicio1;
      delay (100);  
    }
    estadoAN1 = estadoAC1;
    if (inicio1 == 1)
    digitalWrite (ReleF, LOW);
    else
    digitalWrite (ReleF, HIGH);}
    {
      estadoAC2 = digitalRead (PulsadorC);
    if (estadoAC2 && estadoAN2 == 0){
      inicio2 = 1 - inicio2;
      delay (100);
    }
    estadoAN2 = estadoAC2;
    if (inicio2 == 1)
    digitalWrite (ReleG, LOW);
    else
    digitalWrite (ReleG, HIGH);
    }
    {
      estadoAC3 = digitalRead (PulsadorD);
    if (estadoAC3 && estadoAN3 == 0){
      inicio3 = 1 - inicio3;
      delay (100);
    }
    estadoAN3 = estadoAC3;
    if (inicio3 == 1)
    digitalWrite (ReleH, LOW);
    else
    digitalWrite (ReleH, HIGH);
    estadoAN3 = estadoAC3;
    if (inicio3 == 1);
    }
 }

Muchas gracias.

Presentas bien el código, lo explicas bastante bien pero falta información o comentarios en el código que permitan seguirlo.

Tienes un motor que mueve/apaga la cinta transportadora.
4 pulsadores para elegir que producto moverá.
Y falta dos botones para controlar el motor que se mueve lateralmente.

Como has llamado a esos 2 botones, al motor y como lo controlas, es AC, DC usas un puente H o no?

hola surbyte saludos, a los botones que accionan y realizan el movimiento lateral estan definidos como releEJEy salida 6, releEJEz salida 10. Cambie algo del codigo posteo solo la parte que me esta confundiendo:

 estadoAC = digitalRead (PulsadorA);
  if (estadoAC && estadoAN == 0){
    inicio = 1 - inicio;
    delay (100);
  }
  estadoAN = estadoAC;
  if (inicio == 1)
  digitalWrite (ReleE, LOW);
  else 
  digitalWrite (ReleE, HIGH);
  estadoAN = estadoAC;
  if (inicio == 1)
  digitalWrite (releEJEy, LOW);
  else
  digitalWrite (releEJEy, HIGH);
    
    estadoAC1 = digitalRead (PulsadorB);
    if (estadoAC1 && estadoAN1 == 0){
      inicio1 = 1 - inicio1;
      delay (100);  
    }
    estadoAN1 = estadoAC1;
    if (inicio1 == 1)
    digitalWrite (ReleF, LOW);
    else
    digitalWrite (ReleF, HIGH);
    estadoAN1 = estadoAC1;
      if (inicio1 == 1)
  digitalWrite (releEJEy, LOW);
  else
  digitalWrite (releEJEy, HIGH);

      estadoAC2 = digitalRead (PulsadorC);
    if (estadoAC2 && estadoAN2 == 0){
      inicio2 = 1 - inicio2;
      delay (100);
    }
    estadoAN2 = estadoAC2;
    if (inicio2 == 1)
    digitalWrite (ReleG, LOW);
    else
    digitalWrite (ReleG, HIGH);
    estadoAN2 = estadoAC2;
      if (inicio2 == 1)
  digitalWrite (releEJEz, LOW);
  else
  digitalWrite (releEJEz, HIGH);
    
      estadoAC3 = digitalRead (PulsadorD);
    if (estadoAC3 && estadoAN3 == 0){
      inicio3 = 1 - inicio3;
      delay (100);
    }
    estadoAN3 = estadoAC3;
    if (inicio3 == 1)
    digitalWrite (ReleH, LOW);
    else
    digitalWrite (ReleH, HIGH);
    estadoAN3 = estadoAC3;
    if (inicio3 == 1)
    digitalWrite (releEJEz, LOW);
    else
    digitalWrite (releEJEz, HIGH);
 }

la idea es la siguiente, para el movimiento lateral lo accionaria con un rele dpdt para invertir el giro con sus finales de carrera, con el boton definido como pulsadorA, pulsadorB estaba intentando hacer que al activar la salida 2 o 3 digital tambien se active la salida 8 pero solamente con estas dos salidas digitales 2 y 3, despues hacer lo mismo con el pulsadorC y pulsadorD, con estos activar las salidas 4 y 5 a su vez activar la salida 10.

El motor que acciona el movimiento lateral es Corriente AC.
las salidas accionaran reles de 24 vac que los hare con modulos de reles.
E

#define PulsadorA A2   //defino los pulsadores y los reles, entradas y salidas
#define PulsadorB A3
#define PulsadorC A4
#define PulsadorD A5
#define ReleE 2
#define ReleF 3
#define ReleG 4
#define ReleH 5
#define releEJEy 6 
#define releEJEz 10
 int RELE = 8;
 int Pulsador1 = A0;
 int Pulsador2 = A1;
 
int inicio = 0;            //variable de cada boton
 int estadoAC = 0;
 int estadoAN = 0;
 int inicio1 = 0;
 int estadoAC1 = 0;
 int estadoAN1 = 0;
 
 int inicio2 = 0;
 int estadoAC2 = 0;
 int estadoAN2 = 0;
 int inicio3 = 0;
 int estadoAC3 = 0;
 int estadoAN3 = 0;

 void setup () {
  pinMode (ReleE, OUTPUT);     //salidas 
  pinMode (ReleF, OUTPUT);
  pinMode (ReleG, OUTPUT);
  pinMode (ReleH, OUTPUT);
  pinMode (releEJEy, OUTPUT);
  pinMode (releEJEz, OUTPUT);
  pinMode (RELE, OUTPUT);
  pinMode (PulsadorA, INPUT);  // entradas
  pinMode (PulsadorB, INPUT);
  pinMode (PulsadorC, INPUT);
  pinMode (PulsadorD, INPUT);
  pinMode (Pulsador1,INPUT);
  pinMode (Pulsador2,INPUT);  
  
  
  }

 void loop (){
  
  if(digitalRead(Pulsador1) == HIGH){  // 2 Pulsadores que se encargan del encendidod y apagado, 
    digitalWrite (RELE, HIGH);                    pulsador1 enciende la cinta y el pulsador2 lo apaga
  }
  else if (digitalRead(Pulsador2) == HIGH){
    digitalWrite(RELE,LOW);
  } 
    estadoAC = digitalRead (PulsadorA);      // Un boton on/off de la salida 2 pulsadorA
  if (estadoAC && estadoAN == 0){
    inicio = 1 - inicio;
    delay (100);
  }
  estadoAN = estadoAC;
  if (inicio == 1)
  digitalWrite (ReleE, LOW);
  else 
  digitalWrite (ReleE, HIGH);
  estadoAN = estadoAC;
  if (inicio == 1)                          //aqui funciona bien se activa la salida del ReleE 2 y del releEJEy 6 cuando 
  digitalWrite (releEJEy, LOW);              apretando el pulsadorA.
  else
  digitalWrite (releEJEy, HIGH);
    
    estadoAC1 = digitalRead (PulsadorB);
    if (estadoAC1 && estadoAN1 == 0){
      inicio1 = 1 - inicio1;
      delay (100);  
    }
    estadoAN1 = estadoAC1;
    if (inicio1 == 1)
    digitalWrite (ReleF, LOW);
    else
    digitalWrite (ReleF, HIGH);
    estadoAN1 = estadoAC1;
      if (inicio1 == 1)                       ///Aqui ya no quiere funcionar, no se que estoy haciendo mal.
  digitalWrite (releEJEy, LOW);
  else
  digitalWrite (releEJEy, HIGH);

      estadoAC2 = digitalRead (PulsadorC);
    if (estadoAC2 && estadoAN2 == 0){
      inicio2 = 1 - inicio2;
      delay (100);
    }
    estadoAN2 = estadoAC2;
    if (inicio2 == 1)
    digitalWrite (ReleG, LOW);
    else
    digitalWrite (ReleG, HIGH);
    estadoAN2 = estadoAC2;
      if (inicio2 == 1)
  digitalWrite (releEJEz, LOW);
  else
  digitalWrite (releEJEz, HIGH);
    
      estadoAC3 = digitalRead (PulsadorD);
    if (estadoAC3 && estadoAN3 == 0){
      inicio3 = 1 - inicio3;
      delay (100);
    }
    estadoAN3 = estadoAC3;
    if (inicio3 == 1)
    digitalWrite (ReleH, LOW);
    else
    digitalWrite (ReleH, HIGH);
    estadoAN3 = estadoAC3;
    if (inicio3 == 1)
    digitalWrite (releEJEz, LOW);
    else
    digitalWrite (releEJEz, HIGH);
 }

Espero que se entienda.

Hola sutbyte buenas noches, te paso a contar que es lo que estoy experimentando,

en esta parte del codigo:

estadoAC = digitalRead (PulsadorA);
  if (estadoAC && estadoAN == 0){
    inicio = 1 - inicio;
    delay (100);
  }
  
  estadoAN = estadoAC;
  if (inicio == 1)
  digitalWrite (ReleE, LOW);               /// apreto el pulsadorA funciona la salida ReleE, sin 
  else 
  digitalWrite (ReleE, HIGH);
  {                                              //    embargo en la salida releEJEy solo hay un pequeño
  if (inicio == 1) 
  digitalWrite (releEJEy, LOW);          //      parpadeo en el led indicador del rele.
  else
  digitalWrite (releEJEy, HIGH);          ///    No lo activa directamente.
  }
        
    estadoAC1 = digitalRead (PulsadorB);
    if (estadoAC1 && estadoAN1 == 0){
      inicio1 = 1 - inicio1;
      delay (100);  
    }  
    estadoAN1 = estadoAC1;
    if (inicio1 == 1)
    digitalWrite (ReleF, LOW);       //      aprieto el pulsadorB y 
    else
    digitalWrite (ReleF, HIGH);               tengo salida en ReleF y releEJEy)
    {
  if (inicio1 == 1) 
  digitalWrite (releEJEy, LOW);
  else
  digitalWrite (releEJEy, HIGH);    //
    }

No entiendo muy bien lo que esta pasando, podrias chequear por favor el codigo? Muchas gracias

QUe es esto?

	{                                              //    embargo en la salida releEJEy solo hay un pequeño
	if (inicio == 1) 
		 digitalWrite (releEJEy, LOW);          //      parpadeo en el led indicador del rele.
	else
		  digitalWrite (releEJEy, HIGH);          ///    No lo activa directamente.
	}
estadoAC = digitalRead (PulsadorA);
  if (estadoAC && estadoAN == 0){
    inicio = 1 - inicio;
    delay (100);
  }
 
  estadoAN = estadoAC;
  if (inicio == 1)
  digitalWrite (ReleE, LOW);  /// apreto el pulsadorA funciona la salida ReleE, sin embargo en la salida releEJEy solo hay un pequeño parpadeo en el led indicador del rele. No lo activa directamente.
    else
  digitalWrite (ReleE, HIGH);
  {                                                  
  if (inicio == 1)
  digitalWrite (releEJEy, LOW);               
  else
  digitalWrite (releEJEy, HIGH);             .
  }
       
    estadoAC1 = digitalRead (PulsadorB);  //aprieto el pulsadorB y tengo salida en ReleF y releEJEy. o sea que se activa un rele en ReleF y otra salida en releEJEy, se entiende?
    if (estadoAC1 && estadoAN1 == 0){
      inicio1 = 1 - inicio1;
      delay (100); 
    } 
    estadoAN1 = estadoAC1;
    if (inicio1 == 1)
    digitalWrite (ReleF, LOW);         .
    else
    digitalWrite (ReleF, HIGH);               
    {
  if (inicio1 == 1)
  digitalWrite (releEJEy, LOW);
  else
  digitalWrite (releEJEy, HIGH);  
    }

o sea que yo al apretar el PulsadorB se activa la salida rele F y simultaneamente la salida releEJEy, pero al apretar el PulsadorA se activa la salida ReleE pero en la salida releEJEy que tendria que activarse solo parpadea la luz indicadora en el modulo del rele correspondiente.
Disculpas por todo el caos que arme.

Eso si pero que tienen que ver los {} que pusiste y que yo resalté puntualmente?

Tu código aunque perfectible no esta mal. Que es lo que no hace como tu quieres?

lo que quiero que haga es lo siguiente, que cuando pulso el boton pulsadorA se active la salida releE y que a su vez tambien se active la salida del releEJEy, que el pulsadorB active la salida releF y que tambien active la salida releEJEy, que el pulsadorC active el releG y la salida releEJEz, Y que pulsadorD active el releH y la salida releEJEz tambien.

no se si me explico? , que al activar releE iria el tubo de la cinta al recipiente correspondiente, supongamos al recipiente 1, y que a su vez si la cinta esta en el carril contrario se active tambien la salida releEJEy para que se mueva al lateral correspondiente donde esta el recipiente.

Gracias por responder

Hola surbyte, estoy a punto de conseguirlo, modifique el codigo y en parte funciona, lo que necesito probar es con la parte del pulsadorC y pulsadorD.
Estoy esperando que me lleguen unos componentes para adjuntar al proyecto para seguir y probar, pero en definitiva esta en camino. Cuando tenga los materiales que creo seran entre mañana y pasado, voy a postear los resultados. Muchas gracias