Problemas con un proyecto activador de rele por el sensor ultrasonico y leds

buenas necesito ayuda en mi codigo tengo un problema en el encedido del LEDV necesito que al llegar alos 4cm se prenda ya intente mucho pero no enciende podrian a yudarme solo es ese led

int ECO = 6;
int TRIG = 7;
int LEDV = 8;
int LEDA = 9;
int LEDR = 10;
int DURACION;
int DISTANCIA;
int RELE = 12;

void setup() {
  pinMode(TRIG, OUTPUT);
  pinMode(ECO, INPUT);
  pinMode(LEDV, OUTPUT);
  pinMode(LEDA, OUTPUT);
  pinMode(LEDR, OUTPUT);
  pinMode(RELE, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  digitalWrite(TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH);   // genera el pulso de triger por 10ms
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);

  DURACION = pulseIn(ECO, HIGH);
  DISTANCIA = DURACION / 58.2;
  Serial.println(DISTANCIA);
  delay(250);

  if (DISTANCIA >= 4 && DISTANCIA <= 0)
  {
    digitalWrite(LEDV, HIGH);
    digitalWrite(LEDR, LOW);
    digitalWrite(LEDA, LOW);
    digitalWrite (RELE , HIGH);
  }

  if (DISTANCIA <= 14 && DISTANCIA >= 0)
  {
    digitalWrite (LEDV, LOW);
    digitalWrite(LEDR, LOW);
    digitalWrite(LEDA, HIGH);
    digitalWrite (RELE , HIGH);
  }

  if (DISTANCIA >= 16 && DISTANCIA >= 0)
  {
    digitalWrite (LEDV, LOW);
    digitalWrite(LEDR, HIGH);
    digitalWrite(LEDA, LOW);
    digitalWrite (RELE , HIGH);
  }
  if (DISTANCIA >= 4)
  {
    digitalWrite(RELE , LOW);
  }
}

:warning:
Código corregido

Tu publicación fue ** MOVIDA ** a su ubicación actual ya que es más adecuada.

¿Podría también tomarse unos minutos para Aprenda a usar el foro .

Tienes algunos problemas con tus condicionales, veamos

if(DISTANCIA >=4 && DISTANCIA<=0) {

Esta condición no se va a cumplir jamás (y entiendo que es justamente la del problema con el LED) porque para que se cumpla la distancia tiene que ser al menos 4 cm y al mismo tiempo tiene que ser 0 cm o menos (¿centímetros negativos?).
Imposible que eso ocurra (al menos sin plegar el espacio-tiempo :wink: ) porque como mínimo una de las 2 condiciones indefectiblemente va a ser falsa por lo que el condicional siempre será falso.

Este condicional está bien planteado

if(DISTANCIA <=14 && DISTANCIA>=0) {

Se cumple siempre que la distancia esté entre 14 cm y 0 cm inclusive.
Pero creo que va crear conflicto con tu medición de 4 cm porque justamente estaría dentro del rango en que apaga el LED verde.

Este otro condicional

if(DISTANCIA >=16 && DISTANCIA>=0) {

no tiene mucho sentido, ya que si la distancia es igual o mayor a 16 cm indefectiblemente lo es a 0 cm. Y si fuese menor a 16 cm ya deja de cumplirse así que solo alcanza con definirla asi

if(DISTANCIA >=16) {

Volviendo a tu problema, una solución podría ser

if (DISTANCIA == 4) {
// aca enciendes led verde y lo que haga falta
}

Pero si puede haber cierta tolerancia, creo que sería mejor por ejemplo

if(DISTANCIA <= 4.2 && DISTANCIA >= 3.8) {
// aca enciendes led verde y lo que haga falta
}

En realidad deberías explicar mejor lo que quieres porque mirando los condicionales (aunque no estén bien entiendo la idea) se solapan.
Por ej. La distancia de 4 cm queda dentro del rango 0 a 14 cm pero deben hacer cosas diferentes, ¿me explico?

1 Like

Moderador
He editado tu código del primer post quitando espacios innecesarios y aplicando Autoformato con el IDE Ctrl+T, algo que no muerde pero que muy pocos usan.
image
Por lo demás, ya @anon90500195 te ha indicado el problema.

1 Like

gracias y solucione con sus respuestas
lo siguiente es el llenado de tanque quiero que llene el tanque y despues de llenarse yo tengo que vaciarlo pero no se debe de activar la bomba hasta que llegue o travez a estar vacio pero que los leds marquen que se esta vaciando gracias si me dan un consejo

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