Buenas, necesito obligar al arduino a que realice la acción dentro de la condición de if(distancia1 < 20).
Estoy usando sensores de ultra sonido para localizar objetos, cuando el sensor detecte algo a una distancia menor a 20cm que encienda el led por 10 seg.
El problema es que si el sensor deja de ver el objeto antes de que culminen los 10seg por que este sigue su trayecto , termina al instante la acción dentro del if por que no se cumple la condición.
Quiero obligar a que realice la acción de encender el led por 10seg y luego apagar por 10seg una vez el sensor detecte un objeto a menos de 20cm, aun si este se pierde del rango del sensor.
Este es el código que llevo por :
//Motor
int led1=13;
//ultrasonido 1, izquierdo//
//variables
long distancia1;
long tiempo1;
//Pines
int trigger1=2; //salida de onda
int echo1=3; //entrada del eco
//Contador
int ledState = LOW; // ledState se usará para establecer el estado del LED
long previousMillis = 0; // almacenará la última vez que el estado del LED se actualizó
long interval = 10000; // intervalo del parpadeo (en milisegundos)
void setup(){
Serial.begin(9600);
pinMode(led1,OUTPUT);
//Configuracion de salida y entrada del ultrasonido 1//
pinMode(trigger1,OUTPUT);
pinMode(echo1, INPUT);
}
void loop() {
//ultrasonido 1//
//calculo de a distancia y el tiempo//
digitalWrite(trigger1,LOW); /* Por cuestión de estabilización del sensor*/
delayMicroseconds(5);
digitalWrite(trigger1, HIGH); /* envío del pulso ultrasónico*/
delayMicroseconds(10);
tiempo1=pulseIn(echo1, HIGH); /* Función para medir la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío del pulso ultrasónico y cuando el sensor recibe el rebote,
es decir: desde que el pin empieza a recibir el rebote, HIGH, hasta que deja de hacerlo, LOW, la longitud del pulso entrante*/
distancia1= int(0.017*tiempo1); /fórmula para calcular la distancia obteniendo un valor entero/
//condicion para encerder el led
if(distancia1 < 20)
{
unsigned long currentMillis = millis(); // Se toma el tiempo actual se comprueba si el tiempo actual menos el tiempo en que el LED cambió de estado por última vez es mayor que el intervalo.
if (currentMillis - previousMillis > interval) //Si se cumple la condición se guarda el nuevo tiempo en el que el LED cambia de estado
{
previousMillis = currentMillis; // Y ahora cambiamos de estado el LED, si está encendido a apagado o viceversa.
if (ledState == LOW)
{
ledState = HIGH;
}
else
{
ledState = LOW;
}
digitalWrite(led1, ledState); // Hacemos que el contenido de la variable llegue al LED
}
}
else
{
digitalWrite(led1, LOW);
}
Serial.println("Distancia ");
Serial.println(distancia1);
Serial.println(" cm");
}