Hola arduineros! Este es mi primer post en busca de ayuda en este foro, ya q en general busco la info hasta dar con ella, pero este no es el caso, ya q no he encontrado nada al respecto en la web.
Para ir al grano les cuento que tengo un Arduino UNO que controla extractores e inyectores de aire, entre otros dispositivos en un invernadero, las mediciones de temperatura y humedad las hago con 6 sensores DHT11, los cuales funcionan bien y logro efectuar todas las tareas asociadas a los valores de medición.
El problema aparece al tratar de guardar y leer los valores obtenidos en la EEPROM, ya que mi intención es guardar estos valores mínimos y máximos junto al horario en donde se producen estos pics de T° y %HR, el horario lo manejo con un DS1302, el cual también funciona correctamente.
Para guardar los valores creé unas variables del tipo array con float e int según es necesario para los valores de temperatura q son float y los valores de horario (hora y min) en los cuales se producen los máximos y nínimos como sigue:
float Tmin[] = {1, 2, 3, 4, 5, 6}; // guarda valor de min de temperatura
int TminHH[] = {7, 8, 9, 10, 11, 12}; // guarda valor de hora del evento
int TminMM[] = {13, 14, 15, 16, 17, 18}; //guarda valor de minuto del evento
Una vez obtenidos todos los valores (son 6 sensores), los envío a escribir a la EEPROM con el siguiente código:
for (int i=1; i<7; i++)
{
Tmin[i] = EEPROM.read(i);
delay(50);
if(te[i] < Tmin[i] || Tmin[i]==0) //Escribimos los valores mínimos de temperatura de los 6 sensores
{ //usando las posiciones 1 a 6 de memoria eeprom
Tmin[i] = te[i];
EEPROM.write(i,Tmin[i]);
if(i==1)
{
EEPROM.write(7,t.hour);
EEPROM.write(13,t.min);
}
if(i==2)
{
EEPROM.write(8,t.hour);
EEPROM.write(14,t.min);//Usamos las posiciones 7 a 18´de la eeprom para guardar valores de
//hora
} // y minutos de eventos de minimos de temperatura separados para leerlo
//como array
if(i==3)
{
EEPROM.write(9,t.hour);
EEPROM.write(15,t.min);
}
if(i==4)
{
EEPROM.write(10,t.hour);
EEPROM.write(16,t.min);
}
if(i==5)
{
EEPROM.write(11,t.hour);
EEPROM.write(17,t.min);
}
if(i==6)
{
EEPROM.write(12,t.hour);
EEPROM.write(18,t.min);
}
}
delay(50);
}
Luego para leer los valores ingresados a la EEPROM y mostrarlos por le puerto serie, tengo el siguiente código:
for (int i=1; i<7; i++)
{
Tmin[i] = EEPROM.read(i);
delay(50);
}
for (int i=7; i<13; i++)
{
TminHH[i] = EEPROM.read(i);
delay(50);
}
for (int i=13; i<19; i++)
{
TminMM[i] = EEPROM.read(i);
delay(50);
}
for (int i=1; i<7; i++)
{
Serial.print("Tmin S");
Serial.print(i);
Serial.print(": ");
Serial.print(Tmin[i]);
Serial.print("*C ");
Serial.print("----");
if(i==1)
{
Serial.print(TminHH[7]);
Serial.print(":");
Serial.println(TminMM[13]);
}
if(i==2)
{
Serial.print(TminHH[8]);
Serial.print(":");
Serial.println(TminMM[14]);
}
if(i==3)
{
Serial.print(TminHH[9]);
Serial.print(":");
Serial.println(TminMM[15]);
}
if(i==4)
{
Serial.print(TminHH[10]);
Serial.print(":");
Serial.println(TminMM[16]);
}
if(i==5)
{
Serial.print(TminHH[11]);
Serial.print(":");
Serial.println(TminMM[17]);
}
if(i==6)
{
Serial.print(TminHH[12]);
Serial.print(":");
Serial.println(TminMM[18]);
}
Serial.println(" - - - - - - - - - - - - - - - - - - - - -");
Pero la salida por el puerto serial es la siguiente:
Thursday 25/7/2019.
0:54:31
- - - - - - - - - - - - - - - - - - - - -
S1 Humedad: 70.00 % S1 Temperatura: 11.00 *C S1 Sensacion Termica: 9.98 *C
S2 Humedad: 70.00 % S2 Temperatura: 12.00 *C S2 Sensacion Termica: 11.08 *C
S3 Humedad: 71.00 % S3 Temperatura: 11.00 *C S3 Sensacion Termica: 10.01 *C
S4 Humedad: 79.00 % S4 Temperatura: 11.00 *C S4 Sensacion Termica: 10.22 *C
- - - - - - - - - - - - - - - - - - - - -
Failed to read from DHT sensor!
S5 Humedad: nan % S5 Temperatura: nan *C S5 Sensacion Termica: nan *C
Failed to read from DHT sensor!
S6 Humedad: nan % S6 Temperatura: nan *C S6 Sensacion Termica: nan *C
- - - - - - - - - - - - - - - - - - - - -
[b]Tmin S1: 0.00*C ----35:35
- - - - - - - - - - - - - - - - - - - - -
Tmin S2: 0.00*C ----35:35
- - - - - - - - - - - - - - - - - - - - -
Tmin S3: 10.00*C ----35:35
- - - - - - - - - - - - - - - - - - - - -
Tmin S4: 10.00*C ----35:35
- - - - - - - - - - - - - - - - - - - - -
Tmin S5: 0.00*C ----54:54
- - - - - - - - - - - - - - - - - - - - -
Tmin S6: 0.00*C ----54:54
- - - - - - - - - - - - - - - - - - - - -[/b]
Por alguna razón en las variables dedicadas a guardar los valores de horario TminHH y TminMM, guarda sólo los valores del minuto en q leyó el valor mínimo de temperaturapara ese sensor (S1,S2,... S6), además como se aprecia en puerto serial, S1 y S2 guarda valor 0, en la variable de temperatura Tmin[1] y Tmin[2] y los valores para Tmin[3,4,5 y 6] los valores son correctos!!!!
Finalmente al leer la memoria EEPROM de esas direcciones ya mencionadas y enviarlas al puerto serie, los valores son correctos!!! o sea seguardaron durante el bucle for de escritura de EEPROM.
Espero haber sido claro ya q el problema es complejo. Espero algún alma caritativa se apiade de este mortal.
Saludos y gracias