HC-SR04 y dos LED (Rojo y Verde)

Hola a todos:
Tengo que hacer un algoritmo utilizando 2 senosres LED y el HC-SR04.

Lo que tiene que hacer dicho algoritmo es que cuando la medición de la distancia no varia, ambos LEDS deben de estar apagados.
Además, al alejar un objeto del sensor, el LED Rojo se debe de prender y el VERDE apagar.

long tiempoTriggEcho; // Defino variable, que toma el tiempo entre el Trigg y el Echo.
int Echo=12; // Defino Variable Echo en el pin 12.
int Trigg=13;// Defino Variable Trigg en el pin 11.

void setup()
{
 pinMode(7, OUTPUT);//Seteo el pin 7 (LED) de Salida.
 pinMode(2, OUTPUT);//Seteo el pin 2 (LED) de Salida.
 pinMode(Echo, INPUT);//Seteo el pin Echo como Entrada.
 pinMode(Trigg, OUTPUT);//Seteo el pin Trigg como Salida. 
 Serial.begin(9600);//Seteo el puerto serial a 9.600 baudios.
}

void loop()
{
 digitalWrite(7, LOW);//Seteo el pin de Entrada (LED) como LOW.
 delay(3);
 digitalWrite(2, LOW);//Seteo el pin de Entrada (LED) como LOW
 delay(3);
 digitalWrite(Trigg, LOW);//Seteo el pin de Entrada abajo. (0v).
 delay(3);
 digitalWrite(Trigg, HIGH);//Seteo el pon de Entrada arriba (5v).
 delay(6);
 digitalWrite(Trigg, LOW);//Seteo el pin de Entrada abajo. (0v) 
 tiempoTriggEcho=pulseIn(Echo,HIGH);//Devuelve el tiempo desde que el pin esta HIGH(1) hasta regresa a LOW(0).
 distanciaencms=float(0.01175*tiempoTriggEcho);
 tiempoTriggEcho=pulseIn(Echo,HIGH);//Devuelve el tiempo desde que el pin esta HIGH(1) hasta regresa a LOW(0).
 delay(distanciaencms*10);

Este código me da la distancia, lo probé y funciona, pero ahora no sé como hacer para que cumpla los dos enunciados que me piden.?

Alguna idea por donde podría rumbiar?

Gracias.

Pero que has hecho y entiende bien lo que digo.
Eso que tienes se copia y pega de cualquier tutorial o incluso pudiste usar alguna librería.
Lo importante para tu aprendizaje es entender que hacer con distancia
Ademas ese código no funciona porque veo variables no definidas.
distanciaencms no esta definido.

Luego no se para que tienes esto alcomienzo del loop

 digitalWrite(7, LOW);//Seteo el pin de Entrada (LED) como LOW.
 delay(3);
 digitalWrite(2, LOW);//Seteo el pin de Entrada (LED) como LOW
 delay(3);

Basicamente lees una variable como distanciaencms y luego debes determinar que la distancia no cambia. Eso es imposible de lograr en un sensor ultrasonico, asi que tomate un margen que se considere que no cambió.
Si la distancia esta mas o menos igual que el siguiente valor +- algo, entonces apagas ambos leds.
Es se hace asi, abs(distancia - distanciaAnt) <= 10
Como haces eso? Pues guardas un valor de distancia y la comparas con un valor tomado antes. Antes cuanto? puedes considerar un tiempo de 500mseg por ejemplo
Tienes un valor que llamos distancia y otro distanciaAnt (anterior).
Cada vez que lees una distancia previamente guardas el valor anterior en distanciaAnt
500 mseg despues mides la distancia.
Si es similar a la anterior apagas los dos leds y si no lo es predes el led ROJO y mantienes el led VERDE apagado. O sea el VERDE parece estar al divino botón (expresión argentina).

Hola Surbyte,

Muchas gracias por la explicación. Me quedo más claro y es una buena opción.
Sobre el código, debería de haberlo puesto en el "Void setup() y no en el Loop. Ahí me equivoqué.
Voy a codificar y cuando lo tenga pronto, lo subo.

Gracias.

No. Si pones un código en el setup solo se ejecutará una vez, por eso se usa para inicializar cosas.

Alvaro como estas? Podrias pasar la solucion con el codigo? Muchas gracias

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