PIR y HC-SR04 como Encender/Apagar LED

El proyecto trata de encender un LED con un sensor PIR durante un determinado tiempo, a no ser que un HC-SR04 lo apague con la lectura de 20 cm o menos.La cuestion es que los sensores se bloquean con el codigo.
El ultrasonido va tomando todo tipo de lecturas hasta que el PIR entra en ALTO,que es cuando se enciende el LED,el ultrasonido deja de tomar lecturas,y no se apaga el LED con la lectura de 20 cm.
Alguien podria decirme como arreglar el codigo para que vaia como se espera en el proyecto???

int LED = 13; // declaramos el led en el pin 13 del arduino
int PIR = 12; // declaramos el sensor PIR en el pin 12
int ESTADO = 0;
int TRIG = 2;
int ECO = 3;
int DURACION;
int DISTANCIA;

void setup(){
  pinMode(TRIG, OUTPUT);
  pinMode(ECO, INPUT);
  pinMode(PIR, INPUT);//El pin 12 lo asignamos como entrada para la señal del sensor
  pinMode(LED, OUTPUT); //El pin 13 del arduino lo asignamos como salida para el led
  Serial.begin(9600);
}
void loop(){
digitalWrite(TRIG, HIGH);
delay(1);
digitalWrite(TRIG, LOW);
DURACION = pulseIn(ECO, HIGH);
DISTANCIA = DURACION / 58.2;
Serial.println(DISTANCIA);
delay(200);

  ESTADO = digitalRead(PIR);
  if (ESTADO == HIGH){
    digitalWrite(LED, HIGH);
    delay(10000);//1 min 40 seg.
  }
  if (DISTANCIA <= 20 && DISTANCIA >= 0);{
   digitalWrite(LED, LOW);}
 }
  

Lógico que se bloquea si tienes un delay de 10 segundos en los que el micro no puede hacer nada.
Tienes que usar millis(), en la sección Documentación hay un excelente tutorial. También puedes guiarte con el ejemplo BlinkWithoutDelay de la IDE.

El disparo del ultrasonido es incorrecto, debería ser

  digitalWrite(TRIG, HIGH); 
  delayMicroseconds(10); //Enviamos un pulso de 10us   
  digitalWrite(TRIG, LOW);

Sigue bloqueandose el ultrasonido cuando se pone en ALTO el PIR,el problema no esta en los milis que le dejo en el proceso del sonar,sino en alguna conjugacion de la funcion,quizas le pida 2 cosas a la vez o no declaro bien la constante de la funcion.Es decir ,quizas el void loop le este declarando:como interceptar una distancia y si se pone en alto el PIR encender el LED,pero debo hacer mal la funcion ya que se bloquea el SR04 cuando detecta presecnia el PIR.

Pero leíste la parte que más te gustó nada más?

Te dije primero

Cualquier cosa se bloquea con 10 segundos haciendo nada.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.