Hola estoy con un sensor Hc-sr04 y mide perfectamente la distancia de cuatro centimetros, cuando acerco la mano a esos cuatro centimetros se enciende un led, pero necesito que si dejo la mano durante 3 segundos a esos cuatro centimentros el sensor lo detecte y el led se apague.
Cuando se inicia el evento deberías comenzar una cuenta usando millis()
Te recomiendo que leas esto y luego... si te animas intenta ver si puedes agregar algo que cuente a partir del momento que inica el disparo..
Ve a Documentación => Indice de temas tutoriales => millis()
Algo mas que tampoco es un error pero si es redundante.
El sensor devuelve valores entre 0 y Distancia Máxima de modo que
if (distancia <=4){ //
este es el evento que iniciaría el tiempo que deseas para apagar el led si la mano permanece X seg.
Como supongo has leído millis(), debes tomar el tiempo cuando comienza la primer detección y luego esperar a que se cumpla el criterio que has adoptado.
como global creas una variable
#define INTERVALO 3000 // se expresa en milisegundos
unsigned long start; // variable para llevar el tiempo.
bool flag = false, // flat para detectar cuando se inicie la cuenta
// estos como globales.
// en tu loop
void loop() {
distancia=sr04.Distance();
Serial.print(distancia);
Serial.println("cm");
delay(10);
if (distancia <=4){ //
if (!flag) {
start = millis(); // toma el valor de millis() cuando x primera vez entramos en este if
flag = true; // entonces solo lo hace 1 vez
}
if (millis()-start > INTERVALO) { // cuando millis() - start supere INTERVALO apago sino mantengo ON
//analogWrite (53, 0);
digitalWrite(53, LOW);
else {
//analogWrite (53,255);
digitalWrite(53, HIGH);
}
}
else {
flag = false; // restauro flag a false porque ya no tenemos un objeto a 4 cm.
digitalWrite(53, LOW);
}
Funciona bien, pero el problema es que ahora no se queda encendido el led al pasar la mano, se enciende y se apaga rapidamente y necesito que se quede encendido al pasar la mano.
Bueno, me alegro mucho porque pudiste encontrar y entender la lógica de funcionamiento.
Por eso te pedí que leyeras millis() para tener la base para entenderlo
Efectivamente, estuve dándole vueltas para entender como funcionaba todo y gracias a tu ayuda pude hacer que funcionase perfectamente. Soy nuevo en este mundillo y estoy aprendiendo poco a poco, me he embarcado en un proyecto que creo que podre sacar adelante.
Es conectar mi aplicación creada en delphi con un cajero gestionado con arduino y poco a poco me va saliendo todo.