Go Down

Topic: duda llamada de funciones (Read 638 times) previous topic - next topic

Jossema106

Feb 12, 2013, 06:57 pm Last Edit: Feb 13, 2013, 11:24 am by Jossema106 Reason: 1
Hola!
Os explico un poco y ahora os pongo el código.
Tengo dos higrómetros y cada uno activa un rele diferente según la humedad, pues bien estoy intentando hacerlo con solo una función y si tengo activo un rele no puedo activar el otro y creo que el problema es que hasta que no salga del while no ejecuta nada mas.

Me gustaría encontrar otra solución para poder regar las dos zonas a la vez

Code: [Select]

  int humedad;
   int sonda;
   int seco;
   int eV;
   String regado;
   String porCiento;
   String tiempoRiego;
   String higro;
   //zona1
     int higro1 = A15;
     int eV1 = 21;
     
   //zona2
     int higro2 = A14;
     int eV2 = 20;
     
void setup()
{
   Serial.begin(9600) ;

 

 pinMode(higro1, INPUT);
 pinMode(eV1, OUTPUT);
 pinMode(eV2, OUTPUT);

}
String riego(int sonda){
 
 seco = analogRead(sonda);
 Serial.println(seco);
 
 if(sonda == 69){
   humedad = 900;
   eV = eV1;
   higro = "h1";
 }
 else{
   humedad = 600;
   eV = eV2;
   higro = "h2";

 }
   
 int i = 0;
 while(seco <= humedad){
   
   //if nivel{
     digitalWrite(eV,HIGH);
     if(i==0){
       tiempoRiego = "-";
       i= 1;
       
       regado = higro;
       regado += "-";
       regado += tiempoRiego;
     }
    seco = analogRead(sonda);
   //}
 }
  digitalWrite(eV,LOW);

 return (regado);

}
void loop()
{
     
 regado = riego(higro1);
 regado = riego(higro2);

 
}



Creo que no me dejo nada del código

gracias
Proyecto:
http://duinoblog.blogspot.com.es/

maxid

deberias hacerlos por separado con una funcion que compare si esta en el rango, y si es asi activa sino desactivas.
El que pregunta aprende, el que responde aprende a responder.

iceman_f5

A mi poco saber te pongo el código con algunas correcciones que creo que mejorarían el código.
Puede que me equivoque en las correcciones.
Code: [Select]
   int humedad;
    int sonda;
    int seco;
    int eV;
    String regado;
    String porCiento;
    String tiempoRiego;
    String higro;
    //zona1
      int higro1 = A15;
      int eV1 = 21;
     
    //zona2
      int higro2 = A14;
      int eV2 = 20;
     
void setup()
{
    Serial.begin(9600) ;

 

//  pinMode(higro1, INPUT);  las entradas analógicas no hay que definirlas como entradas
  pinMode(eV1, OUTPUT);
  pinMode(eV2, OUTPUT);

}
void riego(int sonda){ // no creo que necesites devolver nada de la función
   
  seco = analogRead(sonda);
  Serial.println(seco);
 
  if(sonda == 69){ // sonda será igual a A14 ó A15 ¿no será seco lo que quieres comparar?
    humedad = 900;
    eV = eV1;
    higro = "h1";
  }
  else{
    humedad = 600;
    eV = eV2;
    higro = "h2";

  }
   
  int i = 0;
  while(seco <= humedad){
   
    //if nivel{
      digitalWrite(eV,HIGH);
      if(i==0){
        tiempoRiego = "-";
        i= 1;
       
        regado = higro;
        regado += "-"; // creo que quieres concatenar y eso me parece que se hace con ||, no con +=. pero al ser una variable de tipo string no estoy seguro
        regado += tiempoRiego;
      }
     seco = analogRead(sonda);
    //}
  }
   digitalWrite(eV,LOW);

}
void loop()
{
       
  riego(higro1);
  riego(higro2);

 
}



Lo que has hecho creo que es que riegas una zona hasta que alcanza un cierto valor de humedad y después riegas la otra.
Para hacer lo que dices me parece que tendrás que estructurarlo de otra manera. Evitando un bucle while.

Jossema106

Gracias!

Ya lo he solucionado, cambio un while por un if con su else.

No sabia lo de las entradas analogicas.
Comparo con 69 y 68 porque es el valor que tiene el pin ( creia que tendria a15 y a14) pero no es asi.

Necesito devolver la cadena en la que almaceno previamente la sonda que lee y el tiempo que esta activa.

Se concatena asi.


Gracias!
Proyecto:
http://duinoblog.blogspot.com.es/

Go Up