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