Hola a todos! me estoy liando muchisimo, mi proyecto en si es un dispensador de gel y detectar la presencia de personas y contar cuantas pasan, pero necesito un antirrebote para que el sensor no siga contando si la persona se queda paradota delante del sensor, ya intente con while y siempre se queda con la primera lectura del sensor y nunca sale ¿Saben que estoy haciendo mal? Adjunto el codigo, especificamente es en la parte del Switch donde se elige el sensor que esta activandose, en especial es el sensor 1 el que estoy usando nada mas. Si ven que esta leyendo y escribiendo en el serial es porque tengo conectado en RX y TX un Node mcu que registra todo.
//Arduino uno
#include <SoftwareSerial.h>
//variables sensores
int PinSenTrig1 = 9; //sensor ultra trig 1
int PinSenEcho1 = 10; //sensor ultra echo 2
//int PinSenTrig2 = 3; //sensor ultra trig 3
//int PinSenEcho2 = 4; //sensor ultra echo 4
//int PinSenTrig3 = 5; //sensor ultra trig 5
//int PinSenEcho3 = 14; //sensor ultra echo 6
int PinSenTrigDisp = 2; //sensor de dispersador
int PinSenEchoDisp = 3;
// variable del rele
int rele = 7;
//UN LED :P
int led = 8;
// variables de obstaculos
int obstaculoDisp = LOW; //bajo significa que no hay obstaculos
int obstaculo = LOW;
//CONTADORES
int contadorDisp = 0;
int contadorIzq = 0;
int contadorMedio = 0;
int contadorDere = 0;
int contadorTotal = 0;
//variables para distancias
float tiempo;
float tiempo1;
float tiempo2;
float tiempo3;
float distancia;
float distancia1;
float distancia2;
float distancia3;
char dato = '1';
void setup(){
Serial.begin(9600);
pinMode(led, OUTPUT);
pinMode(PinSenTrig1, OUTPUT); //SESNOR 1 ULTRASONIDO
pinMode(PinSenEcho1, INPUT);
// pinMode(PinSenTrig2, OUTPUT); //SESNOR 2 ULTRASONIDO
// pinMode(PinSenEcho2, INPUT);
// pinMode(PinSenTrig3, OUTPUT); //SESNOR 3 ULTRASONIDO
// pinMode(PinSenEcho3, INPUT);
pinMode(PinSenTrigDisp, OUTPUT); //SENSOR DISPERSOR ULTRASONIDO
pinMode(PinSenEchoDisp, INPUT);
pinMode(rele, OUTPUT); //el rele es salida, controla bomba
}
void loop(){
//---------------------Secuencia de calibracion de los sensores----------------------
//--------------------------------------------------------------------------------
//--------------------------sensor dispersor-------------------------------------
digitalWrite(PinSenTrigDisp, LOW); //genera un pulsolimpio iniciamos con low por .4s
delayMicroseconds(4);
digitalWrite(PinSenTrigDisp, HIGH); //generamos un disparo por
delayMicroseconds(10);
digitalWrite(PinSenTrigDisp, LOW);
tiempo = pulseIn(PinSenEchoDisp, HIGH);
distancia = tiempo/58.3; //especifiacion de fabricante sensor echo
//------------------------------Sensor 1-------------------------------------------------
digitalWrite(PinSenTrig1, LOW); //genera un pulsolimpio iniciamos con low por .4s
delayMicroseconds(4);
digitalWrite(PinSenTrig1, HIGH); //generamos un disparo por
delayMicroseconds(10);
digitalWrite(PinSenTrig1, LOW);
tiempo1 = pulseIn(PinSenEcho1, HIGH);
distancia1 = tiempo1/58.3; //especifiacion de fabricante sensor echo
//-----------------------------Sensor 2 ----------------------------------------------------
// digitalWrite(PinSenTrig2, LOW); //genera un pulsolimpio iniciamos con low por .4s
// delayMicroseconds(4);
// digitalWrite(PinSenTrig2, HIGH); //generamos un disparo por
// delayMicroseconds(10);
// digitalWrite(PinSenTrig2, LOW);
// tiempo2 = pulseIn(PinSenEcho2, HIGH);
// distancia2 = tiempo2/58.3; //especifiacion de fabricante sensor echo
//-------------------------------Sensor 3 -------------------------------------------------
// digitalWrite(PinSenTrig3, LOW); //genera un pulsolimpio iniciamos con low por .4s
// delayMicroseconds(4);
// digitalWrite(PinSenTrig3, HIGH); //generamos un disparo por
// delayMicroseconds(10);
// digitalWrite(PinSenTrig3, LOW);
// tiempo3 = pulseIn(PinSenEcho3, HIGH);
// distancia3 = tiempo3/58.3; //especifiacion de fabricante sensor echo
//--------------------------Termina calibracion-----------------------
//-------------------------------------------------------------------
//Actuador del dispersor
if(distancia >= 1 && distancia <= 13 ){
contadorDisp++;
digitalWrite(rele, LOW); //se activa cuando esta bajo
delay(800);
digitalWrite(rele, HIGH); //se desactiva cuando esta alto
delay(500);
Serial.println(0);
delay(1000);
}
else{
digitalWrite(rele, HIGH);
}
//------------------------seleccion de sensor a usar--------
//dato = Serial.read(); //lee el valor lanzado por el esp y lo guarda el la variable dato
switch (dato){ //inicia a leer el valor llegado
//------------------------sensor 1
case '1':
//AQUI SE NECESITA EL ANTIRREBOTE
if( distancia1 >= 5 && distancia1 <= 40){
contadorIzq++;
Serial.println(1);
//hasta aqui bien
for(int prende = 0; prende < 1; prende++){
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(100);
}
delay(1000);
}
else{
digitalWrite(led, LOW);
}
break;
//------------------------- sensor 2
case '2':
if( distancia1 >= 1 && distancia1 <= 50){
contadorMedio++;
Serial.println(2);
for(int prende = 0; prende < 2; prende++){
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(100);
}
}
else{
digitalWrite(led, LOW);
}
break;
//---------------------------------sensor 3
case '3':
if( distancia1 >= 1 && distancia1 <= 70){
contadorDere++;
Serial.println(3);
for(int prende = 0; prende < 3; prende++){
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(100);
}
}
else{
digitalWrite(led, LOW);
}
break;
default:
break;
}
}