Contador de passagem pessoas em ambiente

boa noite a todos ,
Estou em um protótipo de um contador de pessoas em determinado ambiente , porem estou com dificuldade da logica para usar dois sensores e determinar o sentido para leitura de entrada e de saída .

e a segunda dúvida é incrementar uma forma de selecionar uma contagem máxima de pessoas atravez de algum botão ou dip switch.

o código é o seguinte :

//
// PROJETO :
//
// !!!CONTROLADOR DE OCUPAÇÃO DE AMBIENTES!!!
// !!!Jeferson Fernando Piller!!!

//CONSTANTES

const int SensorA = 2;
const int SensorB = 3;

const int led_vermelho = 12;
const int led_verde = 11;
const int buzzer = 10;

//VARIAVEIS PARA CONTADOR SOMAR

int contador = 0;
int estado_SensorA = 0;
int estadoAnt_SensorA = 1;

//VARIAVEIS PARA CONTADOR DESCENDENTE

int estado_SensorB = 0;
int estadoAnt_SensorB = 1;

void (*funcReset)() = 0;

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

pinMode(SensorA, INPUT_PULLUP);
pinMode(SensorB, INPUT_PULLUP);
pinMode(led_vermelho, OUTPUT);
pinMode (led_verde,OUTPUT);
pinMode (buzzer,OUTPUT);
}

void loop() {

estado_SensorA = digitalRead(SensorA);
estado_SensorB = digitalRead(SensorB);

if (estado_SensorA != estadoAnt_SensorA) {

if (estado_SensorA == HIGH) {

  contador++;
  Serial.println("+");
  Serial.print("pessoas no ambiente = ");
  Serial.println(contador);
  
} 

}
estadoAnt_SensorA = estado_SensorA;

if (estado_SensorB != estadoAnt_SensorB ) {

if (estado_SensorB == HIGH) {
 
  contador--;
  Serial.println("-");
  Serial.print("pessoas no ambiente = ");
  Serial.println(contador);
 
} 

}

estadoAnt_SensorB = estado_SensorB ;

if (contador <=4) { // manter led verde on
digitalWrite(led_vermelho,LOW);
digitalWrite(led_verde,HIGH);
}

else {
digitalWrite(buzzer, LOW);
digitalWrite(led_verde,LOW);
}

if ( contador >=5) { // aciona led alerta de limite maximo de pessoas
digitalWrite(led_vermelho,HIGH);
digitalWrite(led_verde,LOW); // led verde off
}

if (contador >=6) { // aciona buzzer
digitalWrite(buzzer, HIGH);
digitalWrite(led_verde,LOW);
} else {
digitalWrite(led_vermelho, LOW);
digitalWrite(led_verde,LOW);
}

if (contador <=-1){ // reseta
funcReset();

}
}

O problema é que vc está lendo os 2 sensores antes de verificar a mudança de Estado.
Vc tem que fazer seu código verificar qual foi o sentido de leitura dos sensores, por exemplo: se sensor A mudou estado e alguns segundos depois sensor B mudou estado, então entrou pessoa. Mas se a ordem for inversa então saiu pessoa.

Acho que fica mais fácil e melhor usando interrupção externa, pois com looping fica difícil vc saber qual sensor disparou primeiro.
Vc pode fazer uma interrupção para cada sensor, quando o primeiro for acionado então desabilita a interrupção do outro. Após o tratamento da interrupção normaliza tudo.

Muito obrigado pela resposta !!!

Teria como me mandar algum exemplo dessa lógica no IF ?

Muito obrigado mais uma vez …