Validação de Catraca com Arduino

Boa tarde prezados,

Tenho a seguinte situação...

Preciso controlar uma catraca que o estado da solenoide é normalmente aberto (NA).
Onde tenho a necessidade de bloquear a entrada e liberar a saída.

A catraca possui dois sensores magnéticos que são os Sensores de Giro. Sendo a leitura destes para eu realizar a validação ou bloqueio do acesso.
Nestes sensores de giro, conforme o sentido. (entrada ou saída) mudam a ordem de acionamento.

Sendo assim tentei realizar a programação conforme qual sensor é acionado primeiro.
Exemplo: Se sensor1 é acionado primeiro que sensor2 então bloqueia, pois se trata de uma entrada.
Se sensor2 é acionado primeiro que sensor1 então libera(ou no caso, não executa nada, pois a catraca é normalmente aberta).

As etapas de acionamento dos sensores, em um giro de saída são estas
1º) sensor 1 ativo > 2º) sensor 2 ativo > 3º) sensor 1 inativo > 4º) sensor 2 inativo. O Codigo que eu criei, no momento da terceira etapa acaba realizando o bloqueio da solenoide, pois não sei o porque do motivo que ele acaba saindo do while e executando o comando de bloqueio.

#define pinSensor1 11
#define pinSensor2 10
#define pinSolenoide 9

int estadoSolenoide;
int estadoSensor1;
int estadoSensor2;


int s1 = 0;
int s2 = 0;



void setup() {
  // put your setup code here, to run once:
  pinMode(pinSensor1, INPUT_PULLUP);
  pinMode(pinSensor2, INPUT_PULLUP);
  pinMode(pinSolenoide, OUTPUT);
  Serial.begin(9600);

}

void loop() {
  estadoSensor1 = digitalRead(pinSensor1);
  estadoSensor2 = digitalRead(pinSensor2);

  if (estadoSensor2 == LOW) {
    s2 = 1;
  }

  if (estadoSensor1 == LOW) {
    s1 = 1;

  }


  while (s1 > s2) {
    estadoSensor1 = digitalRead(pinSensor1);
    estadoSensor2 = digitalRead(pinSensor2);
    digitalWrite(pinSolenoide, HIGH);
    delay(1000);
    s2 = 0;
    s1 = 0;
    break;
    if (estadoSensor1 == LOW && estadoSensor2 == LOW) {
      digitalWrite(pinSolenoide, HIGH);
      delay(100);
      s2 = 0;
      s1 = 0;
    }

  }

  while (s2 > s1) {
    estadoSensor1 = digitalRead(pinSensor1);
    Serial.println("sensor 2 acionado");
    if (estadoSensor1 == LOW) {
      s2 = 0;
      s1 = 0;
      break;
    }

  }

  if (s1 == s2) {
    s2 = 0;
    s1 = 0;
  }

  digitalWrite(pinSolenoide, LOW);
  Serial.println("LOOP em execução");

}

Alguém tem ideia de onde estou errando?

Tens imensos erros no teu programa no que toca a boas práticas.

Mas o teu problema é este:

void loop() {
  estadoSensor1 = digitalRead(pinSensor1);
  estadoSensor2 = digitalRead(pinSensor2);

lês os sensores no inicio da função loop()...

  if (estadoSensor2 == LOW) {
    s2 = 1;
  }

  if (estadoSensor1 == LOW) {
    s1 = 1;

  }

Isto é ridiculo e não ajuda no resto do programa...

while (s1 > s2) {
    estadoSensor1 = digitalRead(pinSensor1);
    estadoSensor2 = digitalRead(pinSensor2);
    digitalWrite(pinSolenoide, HIGH);
    delay(1000);
    s2 = 0;
    s1 = 0;
    break;
    if (estadoSensor1 == LOW && estadoSensor2 == LOW) {
      digitalWrite(pinSolenoide, HIGH);
      delay(100);
      s2 = 0;
      s1 = 0;
    }

Este pedaço de código (e os outros ciclos while que tens) bloqueiam o programa à espera que s2 seja maior que s1... no entanto, as variáveis estadoSensor ou s1 e s2 nunca mudam dentro deste ciclo e como tal é sempre falso.