AYUDA PARA CALCULAR EL TIEMPO QUE SE CUMPLE UNA CONDICION

primero soy nuevo con arduino asi agradesco comprendan, capas y lo que preguntare es lo siguiente.
estoy haciendo una incubadora
ya hace lo siguiente
tomo las temperaturas y humedad
prende y apago la calefaccion
regula la velocidad de los fancooler dependiendo la temperatura

la cuestion es que estoy probandola y necesito saber el tiempo que dura en cada condicion para hacer una relacion de que cantidad de tiempo estuvo en una determinada temperatura y ver que tan estable esta.

me explico quiero hacer algo asi
leo temperatura

si la temperatura es normal
apaga calefacion
velocidad del fan
AQUI QUIERO GUARDAR EL TIEMPO QUE DURA CUMPLIENDO ESTA CONDICION

si la temperatura es baja
pendre calefaccion
velocidad del fan
AQUI QUIERO GUARDAR EL TIEMPO QUE DURA CUMPLIENDO ESTA CONDICION

para luego poder ver que tan estable esta la incubadora y que incombeniete puede aver con el cambio de temperatura y humedad relativa

Gacias

no se si te sriva esto

unsigned long time;

void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("Time: ");
time = millis();
//prints time since program started
Serial.println(time);
// wait a second so as not to send massive amounts of data
delay(1000);
}

http://www.arduino.cc/en/pmwiki.php?n=Reference/Millis

creo que es algo mas complicado ya que la funcion millis () da los milisegundos desde que se prende la placa y yo lo que quiero es cronometrar las temperaturas para luego de pasado los 21 dias poder estudiar los cambos de temperatura y la eclocion de los huevos

Claro, pero si cuando empieza a cumplirse la condición apuntas millis_1 y cuando deja de cumplirse la condición apuntas millis_2, con una resta millis_2 - millis_1 obtienes los millis que han transcurrido entre ambos apuntes, salvo que el tiempo transcurrido sea superior a aprox 50 días, que el contador millis habrá dado la vuelta. Faltaría saber si quieres sumar por un lado los periodos que cumplen y por otro los que no cumplen y obtener sólo un resumen (se ha cumplido durante 10 horas y no se ha cumplido durante 1 hora) o guardar un log tipo
cumple 100 segundos
no cumple 2 segundos
cumple 200 segundos
no cumple 20 segundos.... etc

Lo que te ha dicho el compañero tiene sentido:

unsigned long tiempo = millis();

Si no recuerdo mal, así debería aguantar hasta 50 días sin desbordarse.

Según inicias el programa haz:

unsigned long tiempoInicial = millis();

y luego cada minuto, hora, segundo, día, ... (lo que prefieras) haces:

unsigned long tiempoActual = millis();

Con el valor de TiempoActual guarda la temperatura.

1 hora son 3.600 seg, 3.600.000 mili-segundos.
1 día son 24 horas, 86.400 seg, 86.400.000 mili-segundos.

Sabiendo esto, puedes identificar los días.

Espero que te ayude.

Un saludo

ok a ver si entendi algo como esto disculpen el desastre en el codigo es que entre prueva y prueva :stuck_out_tongue:

unsigned long Cronometro = 0;
unsigned long PeriodoI = 0;
unsigned long PeriodoF = 0;
if (t < 37) {
PeriodoI = millis();
Serial.print("lectura eeprom "); Serial.println(EEPROM.read(address));
Cronometro = (PeriodoF - PeriodoI);
Serial.print("Cronometro "); Serial.println(Cronometro);
Serial.print("PeriodoF "); Serial.println(PeriodoF);
Serial.print("PeriodoI"); Serial.println(PeriodoI);
PeriodoCalculado = PeriodoCalculado + (Cronometro / 1000);
PeriodoCalculadoMin = PeriodoCalculadoMin + (PeriodoCalculado / 60);
Serial.print("Tempratura Baja "); Serial.print(" \t"); Serial.print("Temperatura: "); Serial.print(t); Serial.print(" *\t"); Serial.print("Humedad: "); Serial.print(h); Serial.print(" %\t"); Serial.print(PeriodoCalculado); Serial.print("\n");
analogWrite(transistorPin, vel);
digitalWrite (pinOut, HIGH);
EEPROM.write(address, PeriodoCalculado);
PeriodoF = millis();
}