Go Down

Topic: Control de paso sobre cinta transportadora (Read 97 times) previous topic - next topic

dleiros

Buenas tardes,
Tengo que pedir vuestra ayuda para una parte de un proyecto que estoy elaborando.
Se trata de una cinta transportadora para cajas que según vayan pasando, unos sensores instalados en el trayecto van señalizando la posición de dichas cajas mediante el encendido de unos leds.
En esta parte (lo simplifico) tengo 3 sensores (valDet1, valDet2 y valDet3) y 3 leds (LED01, LED02 y LED03).

Lo que quiero es que:
Si valDet1 HIGH ------- LED01 HIGH (debe mantenerse HIGH aunque valDet1 se ponga a LOW [eso es porque la caja está en el tramo comprendido entre los sensores valDet1 y el valDet2] )

Si valDet2 HIGH ------- LED02 HIGH (debe mantenerse HIGH aunque valDet2 se ponga a LOW [eso es porque la caja está en el tramo comprendido entre los sensores valDet2 y el valDet3] )
                                         LED01 LOW (a no ser que valDet1 esté HIGH [eso es porque una nueva caja entró en la cinta transportadora] )

Si valDet3 HIGH ------- LED03 HIGH (debe mantenerse HIGH aunque valDet3 se ponga a LOW
[eso es porque la caja está en el tramo comprendido entre el sensor valDet3 y la salida] )                                                       
                                        LED02 LOW (a no ser que valDet2 esté HIGH [eso es porque otra caja llegó a ese punto de la cinta transportadora])


Os pongo un fragmento del código en ese punto para que me digáis todos los errores que veais.



Code: [Select]
if (valDet1 == HIGH)
    {
      digitalWrite(LED01, HIGH);
    }
     

 if (valDet2 == HIGH)
    {
      digitalWrite(LED02, HIGH);
      if (valDet1 == LOW) {
        digitalWrite(LED01, LOW);
      }
}

   
 if (valDet3 == HIGH)
    {
      digitalWrite(LED03, HIGH);
            if (valDet2 == LOW) {
        digitalWrite(LED02, LOW);
      }
 }


Muchas gracias.

surbyte

Prueba a ver si esto mejora las cosas, pero en tu planteo te falta un sensor a la salida!

Code: [Select]
bool fled1, fled2, fled3, salida, salidaAnt = false;


if (valDet1 && !valDet2) {
fled1 = true;
}

if (valDet2 && !valDet3) {
fled2 = true;
fled1 = false;
}

if (valDet3 && !salida) {
fled3 = true;
fled2 = false;
} // no hay nada que ponga LED03 en LOW o bien falta sensor Salida

    if (salida && !salidaAnt)
       fled3 = false;
    salidaAnt = salida;

digitalWrite(LED01, fled1?HIGH:LOW);
digitalWrite(LED02, fled2?HIGH:LOW);
digitalWrite(LED03, fled3?HIGH:LOW);

Go Up