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);
}
}
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 ) 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?
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.
Por lo demás, ya @anon90500195 te ha indicado el problema.
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