# Contador de passagem pessoas em ambiente

**URL:** <https://forum.fazedores.com/t/contador-de-passagem-pessoas-em-ambiente/7462>\
**Category:** Arduino\
**Created:** [Julho 2, 2020, 9:59pm UTC](https://forum.fazedores.com/t/contador-de-passagem-pessoas-em-ambiente/7462 "2020-07-02T21:59:18Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![jefersonpiller](https://avatars.discourse-cdn.com/v4/letter/j/8491ac/32.png) [@jefersonpiller](https://forum.fazedores.com/u/jefersonpiller)\
**Post date:** [Julho 2, 2020, 9:59pm UTC](https://forum.fazedores.com/t/contador-de-passagem-pessoas-em-ambiente/7462/1 "2020-07-02T21:59:18Z")

</div>

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();

}  
}

---

<div class="post-metadata">

**Author:** ![rogerbsp](https://avatars.discourse-cdn.com/v4/letter/r/b782af/32.png) [@rogerbsp](https://forum.fazedores.com/u/rogerbsp)\
**Post date:** [Julho 3, 2020, 3:23pm UTC](https://forum.fazedores.com/t/contador-de-passagem-pessoas-em-ambiente/7462/2 "2020-07-03T15:23:50Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![jefersonpiller](https://avatars.discourse-cdn.com/v4/letter/j/8491ac/32.png) [@jefersonpiller](https://forum.fazedores.com/u/jefersonpiller)\
**Post date:** [Julho 4, 2020, 5:42pm UTC](https://forum.fazedores.com/t/contador-de-passagem-pessoas-em-ambiente/7462/3 "2020-07-04T17:42:46Z")

</div>

Muito obrigado pela resposta !!!

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

Muito obrigado mais uma vez …
