Saludos
Crei que esta secuencia seria simple, basicamente lo que la programacion deberia lograr era:
a) un interruptor al estar en posición ON da inicio a la secuencia
b) arranca el motor 1 (motor a pasos tipo nema 23) y gira el equivalente a 120º (se hiso un mecanismo para ajustar los ciclos pues este tipo de motor no da exactos los 120º)
c) al terminar el motor 1 arranca el motor 2 y se mantine girando
d) con un retraso arranca el motor 3 y gira asta que el sensor Lion presicion le manda la señal de paro para motor 2 y 3
e) vuelve a iniciar el ciclo
todo asta el punto d funciona de ahi en adelante es un caos
añado el código para su revisión (solo las secciones en conflicto)
/*
//---------------------------------------- METODO ETIQUETADO DE BOTELLAS ------------------------------------------------------//
//Metodo que hace girar la botella y provee la etiqueta para el etiquetado
//Variables de control:
// pinControlM2 = pin del arduino encargado de enviar el numero de pasos que el motor 2 debe de realizar
// pinControlM3 = pin del arduino encargado de enviar el numero de pasos que el motor 3 debe de realizar
// direccionM2 = la direccion a la que gira el motor "2" (Giro de botella sobre su eje) "i" es al contrario de las manecillas del reloj y "d" es con las manecillas del reloj
// direccionM3 = la direccion a la que gira el motor "3" (Giro de las etiquetas hasta que se detecte un espacio) "i" es al contrario de las manecillas del reloj y "d" es con las manecillas del reloj
void etiquetado(int pinControlM2, int pinControlM3 , char direccionM2 , char direccionM3)
{
//Se establecen las direcciones de giro al motor 2
switch(direccionM2)
{
case 'i':
digitalWrite( giroMotor2 , LOW);
break;
case 'd':
digitalWrite( giroMotor2 , HIGH);
break;
}
//Se establecen las direcciones de giro al motor 3
switch(direccionM3)
{
case 'i':
digitalWrite( giroMotor3 , HIGH);
break;
case 'd':
digitalWrite( giroMotor3 , LOW);
break;
}
//El delay de 1/2 segundo del motor 2 con respecto al motor 3
//Se gira solo el motor 2 por X numero de pasos especificados en la variable "pasosVentajaM2"
for (int i=1; i <= pasosVentajaM2; i++){
digitalWrite( pinControlM2 , HIGH);
delayMicroseconds(velocidadMotores);
digitalWrite( pinControlM2 , LOW);
delayMicroseconds(velocidadMotores);
}
//Pequeño limite para que los dos motores arranquen al mismo tiempo y el sensor lea de nuevo la etiqueta y se brinque el espacio.
//El numero de pasos que el sensor esta "ciego" se especifica en la variable "pasosMargenEtiquetas"
for (int i=1; i <= pasosMargenEtiquetas; i++){
digitalWrite( pinControlM2 , HIGH);
digitalWrite( pinControlM3 , HIGH);
delayMicroseconds(velocidadMotores);
digitalWrite( pinControlM2 , LOW);
digitalWrite( pinControlM3 , LOW);
delayMicroseconds(velocidadMotores);
}
//Los motores 2 y 3 continuaran girando simultaneamente hasta que el arduino detecte el espacio entre etiquetas del sensor, cuando este espacio
//sea detectado el motor 3 dejara de girar y solo girara el motor encargado de hacer girar la botella para que la etiqueta se adhiera.
estadoSensorEtiquetas = 's'; //Se reinicia el sensor para que al siguiente ciclo no para el motor 3
for (int i=1; i <= pasosRestantesM2 - pasosMargenEtiquetas; i++){
switch ( estadoSensorEtiquetas)
{
//'s' si hay etiqueta por lo tanto siguen girando los motores 2 y 3
case 's':
valorSensor = analogRead(A0);
if( valorSensor * (5.0 / 1023.0) < 1){
digitalWrite( pinControlM2 , HIGH);
digitalWrite( pinControlM3 , HIGH);
delayMicroseconds( velocidadMotores - 40 );
digitalWrite( pinControlM2 , LOW);
digitalWrite( pinControlM3 , LOW);
delayMicroseconds( velocidadMotores - 40 );
}else{
digitalWrite( pinControlM2 , HIGH);
delayMicroseconds(velocidadMotores);
digitalWrite( pinControlM2 , LOW);
delayMicroseconds( velocidadMotores - 40 );
estadoSensorEtiquetas = 'n';
}
break;
//'n' no hay etiqueta por lo tanto solo gira el motor 2
case 'n':
digitalWrite( pinControlM2 , HIGH);
delayMicroseconds(velocidadMotores);
digitalWrite( pinControlM2 , LOW);
delayMicroseconds(velocidadMotores);
break;
}
}
// ESTE METODO SE EJECUTARA SOLO SI LA VARIABLE "extensionTiempoEtiquetas" ES: " TRUE "
//Consiste en agregar funcionamiento al motor 3 para que siga girando si aun no detecta el espacio.
if (extensionTiempoEtiquetas)
do{
switch ( estadoSensorEtiquetas)
{
//'s' si hay etiqueta por lo tanto siguen girando los motores 2 y 3
case 's':
valorSensor = analogRead(A0);
if( valorSensor * (5.0 / 1023.0) < 1){
digitalWrite( pinControlM3 , HIGH);
delayMicroseconds( velocidadMotores - 40 );
digitalWrite( pinControlM3 , LOW);
delayMicroseconds( velocidadMotores - 40 );
}else{
estadoSensorEtiquetas = 'n';
}
break;
}
}while(estadoSensorEtiquetas == 's');
}