lio con las variables unsigned long

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 :frowning: 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 :frowning:

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 ! :slight_smile:

//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;
  	}

	
}

Esta es la solución

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

void loop(){

TActual = millis();

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

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...

Cuando desborda comienza de 0 de nuevo

No, esta probado que eso no pasa en el segundo caso.