Go Down

Topic: lio con las variables unsigned long (Read 73 times) previous topic - next topic

albertf1970

Buenos días, me estoy haciendo un poco de lío con las variables unsigned long. Quiero hacer un código que en apariencia debe ser sencillo pero no atino. A ver si alguien me hecha un cable.
Lo que quiero es que una lectura de sensores se repita cada x tiempo. En este caso 10 min o 600000ms.
El código probablemente sea muy mejorable. Hacía muchísimo tiempo que no programaba y lo tengo mas que oxidado :-( Todo va bien hasta que entro en el if, entonces en la asignación TAnterior = TActual+TEspera; siempre me sale mayor  que el tiempo de espera y no es lo que deseo :(

He dado bastantes vueltas por Internet a ver si veía algo copiable, pero no lo he encontrado...Si alguien lo conoce se lo agradeceré. Viendo como lo hacen los demás és como se aprende !  :)

Code: [Select]

//librerias

//constantes
unsigned long TEspera = 600000; //1 hora = 3600000 / 1 min 60000

//variables
unsigned long TActual = 0;
unsigned long TAnterior = 0;
float pH;
float temp;

void setup(){
Serial.begin(9600);
}

float lectura_pH(){
pH = 8.4;
return pH;
}

float lectura_temp(){
temp = 35.5;
return temp;
}


void loop(){

TActual = millis();

if((TAnterior - TActual) > TEspera){
pH = lectura_pH();
temp = lectura_temp();

TAnterior = TActual+TEspera;
  }


}

surbyte

Esta es la solución

Code: [Select]
void loop(){

TActual = millis();

if (TActual > TEspera) {
     pH = lectura_pH();
     temp = lectura_temp();
     TAnterior = TActual+Tespera;
  }
}


De todos modos no es la forma apropiada. La forma apropiada es

Code: [Select]
void loop(){

TActual = millis();

if (TActual-TAnterior > TEspera) {
     pH = lectura_pH();
     temp = lectura_temp();
     TAnterior = TActual;
  }
}

msoffredi

Lo único que agregaría es cuidado con el reseteo de millis(). Cuando desborda comienza de 0 de nuevo. Se arregla usando el valor absoluto de la resta...
--------------------
Marcelo
arduinohobby.com

surbyte

Quote
Cuando desborda comienza de 0 de nuevo
No, esta probado que eso no pasa en el segundo caso.

Go Up