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?