Detección de bloques y semaforos trenes HO

Estimados,
Realicé un proyecto para detectar trenes en bloques con sensores IR. El problema que tengo es que debería poder analizar el bloque en el que me encuentro y prender los semáforos del bloque anterior y posterior.
He tratado pero el proyecto parece un arbolito de navidad encendiendo y apagando leds.
Les dejo el diagrama de placa y el código para ver si alguien puede ayudarme.
Muchas gracias!

// Sensores IR
int Sensor1 = A0; //Sensor 1 is setup on pin A0
int Sensor2 = A1; //Sensor 2 is setup on pin A1
int Sensor3 = A2;
int Sensor4 = A3;
int Sensor5 = A4;
int Sensor6 = A5;
int Sensor7 = A6;
int Sensor8 = A7;
int Sensor9 = A8;
int Sensor10 = A9;
int Sensor11 = A10;
int Sensor12 = A11;

// Leds verdes y rojos
int Green1 = 7;
int Red1 = 6;
int Green2 = 4;
int Red2 = 3;
int Green3 = 22;
int Red3 = 24;
int Green4 = 26;
int Red4 = 28;
int Green5 = 30;
int Red5 = 32;
int Green6 = 34;
int Red6 = 36;
int Green7 = 40;
int Red7 = 42;
int Green8 = 46;
int Red8 = 48;
int Green9 = 23;
int Red9 = 25;
int Green10 = 29;
int Red10 = 31;
int Green11 = 35;
int Red11 = 37;

// banderas para determinar su estado anterior
int bloq1 = 0;
int bloq2 = 0;
int bloq3 = 0;
int bloq4 = 0;
int bloq5 = 0;
int bloq6 = 0;
int bloq7 = 0;
int bloq8 = 0;
int bloq9 = 0;
int bloq10 = 0;
int bloq11 = 0;


void setup() {
  Serial.begin(9600);

  //Establish all of our pins at inputs or outputs

  // Inicializo los sensores IR
  pinMode(Sensor1, INPUT);
  pinMode(Sensor2, INPUT);
  pinMode(Sensor3, INPUT);
  pinMode(Sensor4, INPUT);
  pinMode(Sensor5, INPUT);
  pinMode(Sensor6, INPUT);
  pinMode(Sensor7, INPUT);
  pinMode(Sensor8, INPUT);
  pinMode(Sensor9, INPUT);
  pinMode(Sensor10, INPUT);
  pinMode(Sensor11, INPUT);
  pinMode(Sensor12, INPUT);


  // Inicializo los leds
  pinMode(Green1, OUTPUT);
  pinMode(Red1, OUTPUT);
  pinMode(Green2, OUTPUT);
  pinMode(Red2, OUTPUT);
  pinMode(Green3, OUTPUT);
  pinMode(Red3, OUTPUT);
  pinMode(Green4, OUTPUT);
  pinMode(Red4, OUTPUT);
  pinMode(Green5, OUTPUT);
  pinMode(Red5, OUTPUT);
  pinMode(Green6, OUTPUT);
  pinMode(Red6, OUTPUT);
  pinMode(Green7, OUTPUT);
  pinMode(Red7, OUTPUT);
  pinMode(Green8, OUTPUT);
  pinMode(Red8, OUTPUT);
  pinMode(Green9, OUTPUT);
  pinMode(Red9, OUTPUT);
  pinMode(Green10, OUTPUT);
  pinMode(Red10, OUTPUT);
  pinMode(Green11, OUTPUT);
  pinMode(Red11, OUTPUT);

}

// ///////////////// Comienzo el LOOP ///////////////////////////////////////////////////////////////////////

void loop() {
  // tomo los valores de los sensores para saber que bloques están ocupados.
  int valA1 = analogRead(Sensor1);
  int valA2 = analogRead(Sensor2);
  int valA3 = analogRead(Sensor3);
  int valA4 = analogRead(Sensor4);
  int valA5 = analogRead(Sensor5);
  int valA6 = analogRead(Sensor6);
  int valA7 = analogRead(Sensor7);
  int valA8 = analogRead(Sensor8);
  int valA9 = analogRead(Sensor9);
  int valA10 = analogRead(Sensor10);
  int valA11 = analogRead(Sensor11);
  int valA12 = analogRead(Sensor12);


  // Sets up the values of the different signals we will be reading

  Serial.println(valA1);
  Serial.println(valA2);
  Serial.println(valA3);
  Serial.println(valA4);
  /*    Serial.println(valA5);
      Serial.println(valA6);
      Serial.println(valA7);
      Serial.println(valA8);
      Serial.println(valA9);
      Serial.println(valA10);
      Serial.println(valA11);
      Serial.println(valA12);
  */
  Serial.println("//////////////");
  Serial.println(bloq1);
  Serial.println("//////////////");


  // Evaluo si hay algún bloque ocupado. Si no hay pongo todo en verde.

  if ((valA1 > 300) and (valA2 > 300) and (valA2 > 300) and (valA4 > 300) and (valA5 > 300) and (valA6 > 300) and (valA7 > 300) and (valA8 > 300) and (valA9 > 300) and (valA10 > 300)
      and (valA11 > 300) and (bloq1 == 0) and (bloq2 == 0) and (bloq3 == 0) and (bloq4 == 0) and (bloq5 == 0) and (bloq6 == 0) and (bloq7 == 0) and (bloq8 == 0) and (bloq9 == 0)
      and (bloq10 == 0) and (bloq11 == 0))
  {

    digitalWrite(Green1, LOW);
    digitalWrite(Red1, HIGH);
    digitalWrite(Green2, LOW);
    digitalWrite(Red2, HIGH);
    digitalWrite(Green3, LOW);
    digitalWrite(Red3, HIGH);
    digitalWrite(Green4, LOW);
    digitalWrite(Red4, HIGH);
    digitalWrite(Green5, LOW);
    digitalWrite(Red5, HIGH);
    digitalWrite(Green6, LOW);
    digitalWrite(Red6, HIGH);
    digitalWrite(Green7, LOW);
    digitalWrite(Red7, HIGH);
    digitalWrite(Green8, LOW);
    digitalWrite(Red8, HIGH);
    digitalWrite(Green9, LOW);
    digitalWrite(Red9, HIGH);
    digitalWrite(Green10, LOW);
    digitalWrite(Red10, HIGH);
    digitalWrite(Green11, LOW);
    digitalWrite(Red11, HIGH);

    //delay(200);
  }

  else {

    // Si hay bloque/a ocupado/s identifico cual o cuales son.
    // A futuro podría hacer que si detecta un bloque ocupado no solo ponga su bloque en rojo si no que modifique los valores de VAL siguiente
    // para que muestre ocupado y escriba los digitalwrite del bloque pasado en rojo.

    // Bloque 1
    Serial.println("valA1");
    Serial.println(valA1);
    Serial.println(bloq1);
    if ((valA1 < 300) or (bloq1 == 1)) {
      digitalWrite(Green1, HIGH);
      digitalWrite(Red1, LOW);
      bloq1 = 1;
      bloq2 = 0;
    }
    else {
      digitalWrite(Green1, LOW);
      digitalWrite(Red1, HIGH);
      Serial.println("o por aca");
      bloq1 = 0;
    }

    // Bloque 2
    Serial.println("///////////////");
    Serial.println("valA2");
    Serial.println(valA2);
    Serial.println(bloq2);
    if ((valA2 < 300) or (bloq2 == 1)) {
      digitalWrite(Green2, HIGH);
      digitalWrite(Red2, LOW);
      bloq2 = 1;
      bloq1 = 0;
      bloq3 = 0;
    }
    else {
      digitalWrite(Green2, LOW);
      digitalWrite(Red2, HIGH);
      bloq2 = 0;
    }

    // Bloque 3
    Serial.println("///////////////");
    Serial.println("valA3");
    Serial.println(valA3);
    Serial.println(bloq3);
    if ((valA3 < 300) or (bloq3 == 1)) {
      digitalWrite(Green3, HIGH);
      digitalWrite(Red3, LOW);
      bloq3 = 1;
      bloq2 = 0;
      bloq4 = 0;

    }
    else {
      digitalWrite(Green3, LOW);
      digitalWrite(Red3, HIGH);
      bloq3 = 0;
    }

    // Bloque 4
    if ((valA4 < 300) or (bloq4 == 1)) {
      digitalWrite(Green4, HIGH);
      digitalWrite(Red4, LOW);
      bloq4 = 1;
      bloq3 = 0;
      bloq5 = 0;

    }
    else {
      digitalWrite(Green4, LOW);
      digitalWrite(Red4, HIGH);
      bloq4 = 0;
    }

    // Bloque 5
    if ((valA5 < 300) or (bloq5 == 1)) {
      digitalWrite(Green5, HIGH);
      digitalWrite(Red5, LOW);
      bloq5 = 1;
      bloq4 = 0;
      bloq6 = 0;

    }
    else {
      digitalWrite(Green5, LOW);
      digitalWrite(Red5, HIGH);
      bloq5 = 0;
    }


    if ((valA6 < 300) or (bloq6 == 1)) {
      digitalWrite(Green6, HIGH);
      digitalWrite(Red6, LOW);
      bloq6 = 1;
      bloq5 = 0;
      bloq7 = 0;

    }
    else {
      digitalWrite(Green6, LOW);
      digitalWrite(Red6, HIGH);
      bloq6 = 0;
    }


    if ((valA7 < 300) or (bloq7 == 1)) {
      digitalWrite(Green7, HIGH);
      digitalWrite(Red7, LOW);
      bloq7 = 1;
      bloq6 = 0;
      bloq8 = 0;

    }
    else {
      digitalWrite(Green7, LOW);
      digitalWrite(Red7, HIGH);
      bloq7 = 0;
    }


    if ((valA8 < 300) or (bloq8 == 1)) {
      digitalWrite(Green8, HIGH);
      digitalWrite(Red8, LOW);
      bloq8 = 1;
      bloq7 = 0;
      bloq9 = 0;

    }
    else {
      digitalWrite(Green8, LOW);
      digitalWrite(Red8, HIGH);
      bloq8 = 0;
    }


    if ((valA9 < 300) or (bloq9 == 1)) {
      digitalWrite(Green9, HIGH);
      digitalWrite(Red9, LOW);
      bloq9 = 1;
      bloq8 = 0;
      bloq10 = 0;

    }
    else {
      digitalWrite(Green9, LOW);
      digitalWrite(Red9, HIGH);
      bloq9 = 0;
    }


    if ((valA10 < 300) or (bloq10 == 1)) {
      digitalWrite(Green10, HIGH);
      digitalWrite(Red10, LOW);
      bloq10 = 1;
      bloq9 = 0;
      bloq11 = 0;

    }
    else {
      digitalWrite(Green10, LOW);
      digitalWrite(Red10, HIGH);
      bloq10 = 0;
    }


    if ((valA11 < 300) or (bloq11 == 1)) {
      digitalWrite(Green11, HIGH);
      digitalWrite(Red11, LOW);
      bloq11 = 1;
      bloq10 = 0;


    }
    else {
      digitalWrite(Green11, LOW);
      digitalWrite(Red11, HIGH);
      bloq11 = 0;
    }
  }
}







// ///////////////////////////// FIN LOOP ///////////////////////////////////////////////

¿Podrías poner un link a alguna página que muestre el sensor que estás utilizando?
Yo creo que seguís leyendo incorrectamente las salidas de los sensores al hacerlo con analogRead(), pero puede que para el sensor que usas sea correcto, por eso quisiera confirmarlo.

Saludos

Este sería el sensor que estoy utilizando que difiere del que encontré en la librería en el orden de las patas.

Igualmente he podido hacer funcionar el corrimiento de los semáforos anteriores y posteriores ingresando por cualquiera de las dos puntas.

// Sensores IR
int Sensor1 = A0; //Sensor 1 is setup on pin A0
int Sensor2 = A1; //Sensor 2 is setup on pin A1
int Sensor3 = A2;
int Sensor4 = A3;
int Sensor5 = A4;
int Sensor6 = A5;
int Sensor7 = A6;
int Sensor8 = A7;
int Sensor9 = A8;
int Sensor10 = A9;
int Sensor11 = A10;
int Sensor12 = A11;

// Leds verdes y rojos
int Green1 = 7;
int Red1 = 6;
int Green2 = 4;
int Red2 = 3;
int Green3 = 22;
int Red3 = 24;
int Green4 = 26;
int Red4 = 28;
int Green5 = 30;
int Red5 = 32;
int Green6 = 34;
int Red6 = 36;
int Green7 = 40;
int Red7 = 42;
int Green8 = 46;
int Red8 = 48;
int Green9 = 23;
int Red9 = 25;
int Green10 = 29;
int Red10 = 31;
int Green11 = 35;
int Red11 = 37;

// banderas para determinar su estado anterior
int bloq1 = 0;
int bloq2 = 0;
int bloq3 = 0;
int bloq4 = 0;
int bloq5 = 0;
int bloq6 = 0;
int bloq7 = 0;
int bloq8 = 0;
int bloq9 = 0;
int bloq10 = 0;
int bloq11 = 0;

void setup() {
Serial.begin(9600);

//Establish all of our pins at inputs or outputs

// Inicializo los sensores IR
pinMode(Sensor1, INPUT);
pinMode(Sensor2, INPUT);
pinMode(Sensor3, INPUT);
pinMode(Sensor4, INPUT);
pinMode(Sensor5, INPUT);
pinMode(Sensor6, INPUT);
pinMode(Sensor7, INPUT);
pinMode(Sensor8, INPUT);
pinMode(Sensor9, INPUT);
pinMode(Sensor10, INPUT);
pinMode(Sensor11, INPUT);
pinMode(Sensor12, INPUT);

// Inicializo los leds
pinMode(Green1, OUTPUT);
pinMode(Red1, OUTPUT);
pinMode(Green2, OUTPUT);
pinMode(Red2, OUTPUT);
pinMode(Green3, OUTPUT);
pinMode(Red3, OUTPUT);
pinMode(Green4, OUTPUT);
pinMode(Red4, OUTPUT);
pinMode(Green5, OUTPUT);
pinMode(Red5, OUTPUT);
pinMode(Green6, OUTPUT);
pinMode(Red6, OUTPUT);
pinMode(Green7, OUTPUT);
pinMode(Red7, OUTPUT);
pinMode(Green8, OUTPUT);
pinMode(Red8, OUTPUT);
pinMode(Green9, OUTPUT);
pinMode(Red9, OUTPUT);
pinMode(Green10, OUTPUT);
pinMode(Red10, OUTPUT);
pinMode(Green11, OUTPUT);
pinMode(Red11, OUTPUT);

}

// ///////////////// Comienzo el LOOP ///////////////////////////////////////////////////////////////////////

void loop() {
// tomo los valores de los sensores para saber que bloques están ocupados.
int valA1 = analogRead(Sensor1);
int valA2 = analogRead(Sensor2);
int valA3 = analogRead(Sensor3);
int valA4 = analogRead(Sensor4);
int valA5 = analogRead(Sensor5);
int valA6 = analogRead(Sensor6);
int valA7 = analogRead(Sensor7);
int valA8 = analogRead(Sensor8);
int valA9 = analogRead(Sensor9);
int valA10 = analogRead(Sensor10);
int valA11 = analogRead(Sensor11);
int valA12 = analogRead(Sensor12);

// Sets up the values of the different signals we will be reading
// Evaluo si hay algún bloque ocupado. Si no hay pongo todo en verde.

if ((valA1 > 300) and (valA2 > 300) and (valA2 > 300) and (valA4 > 300) and (valA5 > 300) and (valA6 > 300) and (valA7 > 300) and (valA8 > 300) and (valA9 > 300) and (valA10 > 300)
and (valA11 > 300) and (bloq1 == 0) and (bloq2 == 0) and (bloq3 == 0) and (bloq4 == 0) and (bloq5 == 0) and (bloq6 == 0) and (bloq7 == 0) and (bloq8 == 0) and (bloq9 == 0)
and (bloq10 == 0) and (bloq11 == 0))
{

digitalWrite(Green1, LOW);
digitalWrite(Red1, HIGH);
digitalWrite(Green2, LOW);
digitalWrite(Red2, HIGH);
digitalWrite(Green3, LOW);
digitalWrite(Red3, HIGH);
digitalWrite(Green4, LOW);
digitalWrite(Red4, HIGH);
digitalWrite(Green5, LOW);
digitalWrite(Red5, HIGH);
digitalWrite(Green6, LOW);
digitalWrite(Red6, HIGH);
digitalWrite(Green7, LOW);
digitalWrite(Red7, HIGH);
digitalWrite(Green8, LOW);
digitalWrite(Red8, HIGH);
digitalWrite(Green9, LOW);
digitalWrite(Red9, HIGH);
digitalWrite(Green10, LOW);
digitalWrite(Red10, HIGH);
digitalWrite(Green11, LOW);
digitalWrite(Red11, HIGH);

//delay(200);

}

else {

// Si hay bloque/a ocupado/s identifico cual o cuales son.
// A futuro podría hacer que si detecta un bloque ocupado no solo ponga su bloque en rojo si no que modifique los valores de VAL siguiente
// para que muestre ocupado y escriba los digitalwrite del bloque pasado en rojo.

// Bloque 1
if ((valA1 < 300) or (bloq1 == 1)) {
  digitalWrite(Green1, HIGH);
  digitalWrite(Red1, LOW);
  bloq1 = 1;
  if (valA1 < 300) {
    bloq2 = 1;
    bloq3 = 0;
  }
}
else {
  digitalWrite(Green1, LOW);
  digitalWrite(Red1, HIGH);
  Serial.println("o por aca");
  bloq1 = 0;
}

// Bloque 2
if ((valA2 < 300) or (bloq2 == 1)) {
  digitalWrite(Green2, HIGH);
  digitalWrite(Red2, LOW);
  bloq2 = 1;
  if (valA2 < 300) {
    bloq1 = 1;
    bloq3 = 1;
    bloq4 = 0;
  }
}
else {
  digitalWrite(Green2, LOW);
  digitalWrite(Red2, HIGH);
  bloq2 = 0;
}

// Bloque 3
if ((valA3 < 300) or (bloq3 == 1)) {
  digitalWrite(Green3, HIGH);
  digitalWrite(Red3, LOW);
  bloq3 = 1;
  if (valA3 < 300) {
    bloq1 = 0;
    bloq2 = 1;
    bloq4 = 1;
    bloq5 = 0;
  }
}
else {
  digitalWrite(Green3, LOW);
  digitalWrite(Red3, HIGH);
  bloq3 = 0;
}

// Bloque 4
if ((valA4 < 300) or (bloq4 == 1)) {
  digitalWrite(Green4, HIGH);
  digitalWrite(Red4, LOW);
  bloq4 = 1;
  if (valA4 < 300) {
    bloq2 = 0;
    bloq3 = 1;
    bloq5 = 1;
    bloq6 = 0;
  }

}
else {
  digitalWrite(Green4, LOW);
  digitalWrite(Red4, HIGH);
  bloq4 = 0;
}

// Bloque 5
if ((valA5 < 300) or (bloq5 == 1)) {
  digitalWrite(Green5, HIGH);
  digitalWrite(Red5, LOW);
  bloq5 = 1;
  if (valA5 < 300) {
    bloq3 = 0;
    bloq4 = 1;
    bloq6 = 1;
    bloq7 = 0;
  }

}
else {
  digitalWrite(Green5, LOW);
  digitalWrite(Red5, HIGH);
  bloq5 = 0;
}

// Bloque 6
if ((valA6 < 300) or (bloq6 == 1)) {
  digitalWrite(Green6, HIGH);
  digitalWrite(Red6, LOW);
  bloq6 = 1;
  if (valA6 < 300) {
    bloq4 = 0;
    bloq5 = 1;
    bloq7 = 1;
    bloq8 = 0;
  }

}
else {
  digitalWrite(Green6, LOW);
  digitalWrite(Red6, HIGH);
  bloq6 = 0;
}

// Bloque 7
if ((valA7 < 300) or (bloq7 == 1)) {
  digitalWrite(Green7, HIGH);
  digitalWrite(Red7, LOW);
  bloq7 = 1;
  if (valA7 < 300) {
    bloq5 = 0;
    bloq6 = 1;
    bloq8 = 1;
    bloq9 = 0;
  }
}
else {
  digitalWrite(Green7, LOW);
  digitalWrite(Red7, HIGH);
  bloq7 = 0;
}

// Bloque 8
if ((valA8 < 300) or (bloq8 == 1)) {
  digitalWrite(Green8, HIGH);
  digitalWrite(Red8, LOW);
  bloq8 = 1;
  if (valA8 < 300) {
    bloq6 = 0;
    bloq7 = 1;
    bloq9 = 1;
    bloq10 = 0;
  }

}
else {
  digitalWrite(Green8, LOW);
  digitalWrite(Red8, HIGH);
  bloq8 = 0;
}

// Bloque 9
if ((valA9 < 300) or (bloq9 == 1)) {
  digitalWrite(Green9, HIGH);
  digitalWrite(Red9, LOW);
  bloq9 = 1;
  if (valA9 < 300) {
    bloq7 = 0;
    bloq8 = 1;
    bloq10 = 1;
    bloq11 = 0;
  }

}
else {
  digitalWrite(Green9, LOW);
  digitalWrite(Red9, HIGH);
  bloq9 = 0;
}

// Bloque 10
if ((valA10 < 300) or (bloq10 == 1)) {
  digitalWrite(Green10, HIGH);
  digitalWrite(Red10, LOW);
  bloq10 = 1;
  if (valA10 < 300) {
    bloq8 = 0;
    bloq9 = 1;
    bloq11 = 1;
  }

}
else {
  digitalWrite(Green10, LOW);
  digitalWrite(Red10, HIGH);
  bloq10 = 0;
}

// Bloque 11
if ((valA11 < 300) or (bloq11 == 1)) {
  digitalWrite(Green11, HIGH);
  digitalWrite(Red11, LOW);
  bloq11 = 1;
  if (valA11 < 300) {
    bloq10 = 1;
  }
}
else {
  digitalWrite(Green11, LOW);
  digitalWrite(Red11, HIGH);
  bloq11 = 0;
}

}
}

// ///////////////////////////// FIN LOOP ///////////////////////////////////////////////

Bueno, como lo suponía, ese sensor no se lee con analogRead() sinó con digitalRead() ya que su salida es digital (LOW/HIGH).
Ya te lo habíamos hecho notar en una consulta anterior, de hecho @Surbyte te había corregido el código.

Si bien puedes leerlo de forma analógica no tiene sentido porque vas a leer 0V o 5V, no hay valores intermedios.

La corrección es muy sencilla.
Los pines no hace falta cambiarlos, ya que trabajan tanto como entradas analógicas como digitales y en el setup() ya están definidas como digitales.
Tienes que cambiar los analogRead() por digitalRead(), como resultado tendrás LOW o HiGH.
Por lo tanto tienes que cambiar las comparaciones.
Finalmente vas a tener un código mas corto, más limpio y más veloz. Y sobre todo adecuado a las señales que manejas.

Saludos

Ok, muchas gracias por tu corrección, ya lo realizo en el proyecto! Gracias!

El código corregido quedaría de esta forma:

// Sensores IR
int Sensor1 = A0; //Sensor 1 is setup on pin A0
int Sensor2 = A1; //Sensor 2 is setup on pin A1
int Sensor3 = A2;
int Sensor4 = A3;
int Sensor5 = A4;
int Sensor6 = A5;
int Sensor7 = A6;
int Sensor8 = A7;
int Sensor9 = A8;
int Sensor10 = A9;
int Sensor11 = A10;
int Sensor12 = A11;

// Leds verdes y rojos
int Green1 = 7;
int Red1 = 6;
int Green2 = 4;
int Red2 = 3;
int Green3 = 22;
int Red3 = 24;
int Green4 = 26;
int Red4 = 28;
int Green5 = 30;
int Red5 = 32;
int Green6 = 34;
int Red6 = 36;
int Green7 = 40;
int Red7 = 42;
int Green8 = 46;
int Red8 = 48;
int Green9 = 23;
int Red9 = 25;
int Green10 = 29;
int Red10 = 31;
int Green11 = 35;
int Red11 = 37;

// banderas para determinar su estado anterior
int bloq1 = 0;
int bloq2 = 0;
int bloq3 = 0;
int bloq4 = 0;
int bloq5 = 0;
int bloq6 = 0;
int bloq7 = 0;
int bloq8 = 0;
int bloq9 = 0;
int bloq10 = 0;
int bloq11 = 0;


void setup() {
  Serial.begin(9600);

  //Establish all of our pins at inputs or outputs

  // Inicializo los sensores IR
  pinMode(Sensor1, INPUT);
  pinMode(Sensor2, INPUT);
  pinMode(Sensor3, INPUT);
  pinMode(Sensor4, INPUT);
  pinMode(Sensor5, INPUT);
  pinMode(Sensor6, INPUT);
  pinMode(Sensor7, INPUT);
  pinMode(Sensor8, INPUT);
  pinMode(Sensor9, INPUT);
  pinMode(Sensor10, INPUT);
  pinMode(Sensor11, INPUT);
  pinMode(Sensor12, INPUT);


  // Inicializo los leds
  pinMode(Green1, OUTPUT);
  pinMode(Red1, OUTPUT);
  pinMode(Green2, OUTPUT);
  pinMode(Red2, OUTPUT);
  pinMode(Green3, OUTPUT);
  pinMode(Red3, OUTPUT);
  pinMode(Green4, OUTPUT);
  pinMode(Red4, OUTPUT);
  pinMode(Green5, OUTPUT);
  pinMode(Red5, OUTPUT);
  pinMode(Green6, OUTPUT);
  pinMode(Red6, OUTPUT);
  pinMode(Green7, OUTPUT);
  pinMode(Red7, OUTPUT);
  pinMode(Green8, OUTPUT);
  pinMode(Red8, OUTPUT);
  pinMode(Green9, OUTPUT);
  pinMode(Red9, OUTPUT);
  pinMode(Green10, OUTPUT);
  pinMode(Red10, OUTPUT);
  pinMode(Green11, OUTPUT);
  pinMode(Red11, OUTPUT);

}

// ///////////////// Comienzo el LOOP ///////////////////////////////////////////////////////////////////////

void loop() {
  // tomo los valores de los sensores para saber que bloques están ocupados.
  int valA1 = digitalRead(Sensor1);
  int valA2 = digitalRead(Sensor2);
  int valA3 = digitalRead(Sensor3);
  int valA4 = digitalRead(Sensor4);
  int valA5 = digitalRead(Sensor5);
  int valA6 = digitalRead(Sensor6);
  int valA7 = digitalRead(Sensor7);
  int valA8 = digitalRead(Sensor8);
  int valA9 = digitalRead(Sensor9);
  int valA10 = digitalRead(Sensor10);
  int valA11 = digitalRead(Sensor11);
  int valA12 = digitalRead(Sensor12);


  // Sets up the values of the different signals we will be reading
  // Evaluo si hay algún bloque ocupado. Si no hay pongo todo en verde.

  if ((valA1 == LOW) and (valA2 == LOW) and (valA2 == LOW) and (valA4 == LOW) and (valA5 == LOW) and (valA6 == LOW) and (valA7 == LOW) and (valA8 == LOW) and (valA9 == LOW) and (valA10 == LOW)
      and (valA11 == LOW) and (bloq1 == 0) and (bloq2 == 0) and (bloq3 == 0) and (bloq4 == 0) and (bloq5 == 0) and (bloq6 == 0) and (bloq7 == 0) and (bloq8 == 0) and (bloq9 == 0)
      and (bloq10 == 0) and (bloq11 == 0))
  {

    digitalWrite(Green1, LOW);
    digitalWrite(Red1, HIGH);
    digitalWrite(Green2, LOW);
    digitalWrite(Red2, HIGH);
    digitalWrite(Green3, LOW);
    digitalWrite(Red3, HIGH);
    digitalWrite(Green4, LOW);
    digitalWrite(Red4, HIGH);
    digitalWrite(Green5, LOW);
    digitalWrite(Red5, HIGH);
    digitalWrite(Green6, LOW);
    digitalWrite(Red6, HIGH);
    digitalWrite(Green7, LOW);
    digitalWrite(Red7, HIGH);
    digitalWrite(Green8, LOW);
    digitalWrite(Red8, HIGH);
    digitalWrite(Green9, LOW);
    digitalWrite(Red9, HIGH);
    digitalWrite(Green10, LOW);
    digitalWrite(Red10, HIGH);
    digitalWrite(Green11, LOW);
    digitalWrite(Red11, HIGH);

    //delay(200);
  }

  else {

    // Si hay bloque/a ocupado/s identifico cual o cuales son.
    // A futuro podría hacer que si detecta un bloque ocupado no solo ponga su bloque en rojo si no que modifique los valores de VAL siguiente
    // para que muestre ocupado y escriba los digitalwrite del bloque pasado en rojo.

    // Bloque 1
    if ((valA1 == LOW) or (bloq1 == 1)) {
      digitalWrite(Green1, HIGH);
      digitalWrite(Red1, LOW);
      bloq1 = 1;
      if (valA1 == LOW) {
        bloq2 = 1;
        bloq3 = 0;
      }
    }
    else {
      digitalWrite(Green1, LOW);
      digitalWrite(Red1, HIGH);
      Serial.println("o por aca");
      bloq1 = 0;
    }

    // Bloque 2
    if ((valA2 == LOW) or (bloq2 == 1)) {
      digitalWrite(Green2, HIGH);
      digitalWrite(Red2, LOW);
      bloq2 = 1;
      if (valA2 == LOW) {
        bloq1 = 1;
        bloq3 = 1;
        bloq4 = 0;
      }
    }
    else {
      digitalWrite(Green2, LOW);
      digitalWrite(Red2, HIGH);
      bloq2 = 0;
    }

    // Bloque 3
    if ((valA3 == LOW) or (bloq3 == 1)) {
      digitalWrite(Green3, HIGH);
      digitalWrite(Red3, LOW);
      bloq3 = 1;
      if (valA3 == LOW) {
        bloq1 = 0;
        bloq2 = 1;
        bloq4 = 1;
        bloq5 = 0;
      }
    }
    else {
      digitalWrite(Green3, LOW);
      digitalWrite(Red3, HIGH);
      bloq3 = 0;
    }

    // Bloque 4
    if ((valA4 == LOW) or (bloq4 == 1)) {
      digitalWrite(Green4, HIGH);
      digitalWrite(Red4, LOW);
      bloq4 = 1;
      if (valA4 == LOW) {
        bloq2 = 0;
        bloq3 = 1;
        bloq5 = 1;
        bloq6 = 0;
      }

    }
    else {
      digitalWrite(Green4, LOW);
      digitalWrite(Red4, HIGH);
      bloq4 = 0;
    }

    // Bloque 5
    if ((valA5 == LOW) or (bloq5 == 1)) {
      digitalWrite(Green5, HIGH);
      digitalWrite(Red5, LOW);
      bloq5 = 1;
      if (valA5 == LOW) {
        bloq3 = 0;
        bloq4 = 1;
        bloq6 = 1;
        bloq7 = 0;
      }

    }
    else {
      digitalWrite(Green5, LOW);
      digitalWrite(Red5, HIGH);
      bloq5 = 0;
    }

    // Bloque 6
    if ((valA6 == LOW) or (bloq6 == 1)) {
      digitalWrite(Green6, HIGH);
      digitalWrite(Red6, LOW);
      bloq6 = 1;
      if (valA6 == LOW) {
        bloq4 = 0;
        bloq5 = 1;
        bloq7 = 1;
        bloq8 = 0;
      }

    }
    else {
      digitalWrite(Green6, LOW);
      digitalWrite(Red6, HIGH);
      bloq6 = 0;
    }

    // Bloque 7
    if ((valA7 == LOW) or (bloq7 == 1)) {
      digitalWrite(Green7, HIGH);
      digitalWrite(Red7, LOW);
      bloq7 = 1;
      if (valA7 == LOW) {
        bloq5 = 0;
        bloq6 = 1;
        bloq8 = 1;
        bloq9 = 0;
      }
    }
    else {
      digitalWrite(Green7, LOW);
      digitalWrite(Red7, HIGH);
      bloq7 = 0;
    }

    // Bloque 8
    if ((valA8 == LOW) or (bloq8 == 1)) {
      digitalWrite(Green8, HIGH);
      digitalWrite(Red8, LOW);
      bloq8 = 1;
      if (valA8 == LOW) {
        bloq6 = 0;
        bloq7 = 1;
        bloq9 = 1;
        bloq10 = 0;
      }

    }
    else {
      digitalWrite(Green8, LOW);
      digitalWrite(Red8, HIGH);
      bloq8 = 0;
    }

    // Bloque 9
    if ((valA9 == LOW) or (bloq9 == 1)) {
      digitalWrite(Green9, HIGH);
      digitalWrite(Red9, LOW);
      bloq9 = 1;
      if (valA9 == LOW) {
        bloq7 = 0;
        bloq8 = 1;
        bloq10 = 1;
        bloq11 = 0;
      }

    }
    else {
      digitalWrite(Green9, LOW);
      digitalWrite(Red9, HIGH);
      bloq9 = 0;
    }

    // Bloque 10
    if ((valA10 == LOW) or (bloq10 == 1)) {
      digitalWrite(Green10, HIGH);
      digitalWrite(Red10, LOW);
      bloq10 = 1;
      if (valA10 == LOW) {
        bloq8 = 0;
        bloq9 = 1;
        bloq11 = 1;
      }

    }
    else {
      digitalWrite(Green10, LOW);
      digitalWrite(Red10, HIGH);
      bloq10 = 0;
    }

    // Bloque 11
    if ((valA11 == LOW) or (bloq11 == 1)) {
      digitalWrite(Green11, HIGH);
      digitalWrite(Red11, LOW);
      bloq11 = 1;
      if (valA11 == LOW) {
        bloq10 = 1;
      }
    }
    else {
      digitalWrite(Green11, LOW);
      digitalWrite(Red11, HIGH);
      bloq11 = 0;
    }
  }
}







// ///////////////////////////// FIN LOOP ///////////////////////////////////////////////

Moderador:
Te envié un privado @martinez_jm con advertencias por faltas reiteradas. Presta atención y responde x esa vía.

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