Go Down

Topic: ayuda programar bombeo [solucionado] (Read 798 times) previous topic - next topic

fermg

Aug 04, 2013, 08:44 pm Last Edit: Aug 05, 2013, 09:25 pm by fermg Reason: 1
hola gente quiero simular un bombeo, que vallan arrancando las bombas correlativas y que si una bomba lleva encendida X tiempo y si la boya de alto sigue en HIGH arranque otra, no se que estoy haciendo mal porque no hace nada bien.

muchas gracia a todos.

Quote

int bomba[] = { 6, 9, 10, 11 };  // pines digitales de las bombas
const int Boya_alto=7;              // sensor alto
const int Boya_bajo=4;             // sensor bajo
unsigned long tiempo;
int contador_bomba=0;            // contador de la bomba q tiene q arrancar

void setup(){
 for (int i=0; i>3; i++)
 {
   pinMode(bomba,OUTPUT);
 }
 pinMode(Boya_bajo,INPUT);
 pinMode(Boya_alto,INPUT);
}

void loop()
{
 if(digitalRead(Boya_alto)==HIGH)           // si la boya esta en alto entro en el bucle
 {
   tiempo = millis();                              // cojo el tiempo para saber cuando ha empezado
   while(digitalRead(Boya_bajo) != LOW)  // mientras sea diferente a bajo dentro del bucle
   {
     digitalWrite(bomba[contador_bomba],HIGH); //enciendo la bomba que corresponda
     if (digitalRead(Boya_alto == HIGH) && (millis() - tiempo == 3000))  // si el tiempo es superior al marcado.
     {
       contador_bomba++;  // le sumo uno para arrancar la siguiente  bomba
       digitalWrite(bomba[contador_bomba],HIGH);  // arranca la bomba de ayuda.
     }
     delay(100)              
   }
   contador_bomba++;      // aquí una vez se ha bajado el nivel de agua le sumo 1 a la bomba para la siguiente arrancada
 }
 for (int i=0; i>3;i++)                      
 {
   digitalWrite(bomba,LOW);   // apago todas las bombas, no tengo q saber cual esta encendida
   delay(10);
 }
 if(contador_bomba > 3)
 {
   contador_bomba=0;               // si el contador es mayo de 3 se pone a cero
 }
}


muchas gracias a todos, puede ser que este fatal el código.

un saludo;

Fermg

Sergegsx

Desdeel móvil no puedo mirarlo con detalle pero estoy debería de ser mayor o igual
igitalRead(Boya_alto == HIGH) && (millis() - tiempo == 3000)
* Si preguntas, pon el código de tu programa, hace mucho mas fácil ayudarte. Y me ahorro un mensaje pidiendo que lo hagas.
* Si consigues solucionar tu problema, dedica unos minutos a explicar en tu post como lo conseguiste para beneficio de todos.
* Cambia el 'Subject' de tu hilo y añade 'SOLUCIONADO' cuando hayas llegado a una solución al problema que planteaste.
* Utiliza un 'Subject' para tu hilo que explique de que va el hilo.
Si estas empezando:
* Comienza a usar Arduino
* Guías de iniciación a Arduino
* Ejemplos
* Referencia del Lenguaje
* Conceptos básicos
Guia de usuario de arduino
Tutoriales en Ingles
Si necesitas que alguien te escriba el código: http://www.freelancer.com/  o esta  http://www.guru.com/

fermg

Ahora no puedo, pero a la noche lo probaré, solo una duda, ¿si pongo mayor o igual, no estará todo el rato entrando al bucle? esta es mi teoría;
millis()-tiempo >= 3000 por ejemplo, cada vez que pase entrara sumara uno al contador y me encenderá una bomba no? es una pregunta puede que sea absurda si lo es lo sieno.

muchas gracias por responder.

fermg

Hola gente, ya está solucionado el problema era que no había configurado bien los pins porque había puesto >3 y tenía que ser <4 para que funcionase correctamente, con el tema del tiempo si lo pongo >= 3000 me pasa lo que yo creía que se encienden todas las bombas y eso no quiero y lo he dejado como estaba.

muchas gracias a todos

Sergegsx

puede que funcione pero esta mal. Esto

Code: [Select]
(millis() - tiempo == 3000)

solo se cumple durante 1 milisegundo. y si durante ese milisegundo no esta leyendo esta instrucción en concreto, pues no se ejecutara nunca.

revisalo.
* Si preguntas, pon el código de tu programa, hace mucho mas fácil ayudarte. Y me ahorro un mensaje pidiendo que lo hagas.
* Si consigues solucionar tu problema, dedica unos minutos a explicar en tu post como lo conseguiste para beneficio de todos.
* Cambia el 'Subject' de tu hilo y añade 'SOLUCIONADO' cuando hayas llegado a una solución al problema que planteaste.
* Utiliza un 'Subject' para tu hilo que explique de que va el hilo.
Si estas empezando:
* Comienza a usar Arduino
* Guías de iniciación a Arduino
* Ejemplos
* Referencia del Lenguaje
* Conceptos básicos
Guia de usuario de arduino
Tutoriales en Ingles
Si necesitas que alguien te escriba el código: http://www.freelancer.com/  o esta  http://www.guru.com/

fermg

Hola, tienes razón, lo voy a cambiar por millis()-tiempo>=3000 y nada más entrar en el bucle vuelvo a coger el tiempo para que después del tiempo fijado me entre otra bomba, lo probaré esta misma tarde porque ahora no estoy, muchas gracias.

un saludo

Fermg

Go Up