Misuratore Umidità, temperatura min e max e indice di confort con UNO+DHT11+DS18s20

Buongiorno a tutti. Sono una new entry sia in questo forum che nel mondo arduino.
Nel progetto che voglio realizzare una parte riguarda quello che è scritto nel titolo di questo post.
Il problema è che non riesco a misurare la temperatura min e max. In realtà come si vede dalle immagini allegate la max viene rilevata e memorizzata ma la minima rimane su -0,00.
Dove sbaglio???
scusate in anticipo se il codice è un po' così a...cavolo!!

//Temperatura con sensore dallas+Dht11 e visualizzazione del confort
//


#include <dht11.h>
#include "OneWire/OneWire.h"
#include "dallas-temperature-control/DallasTemperature.h"
#include "EEPROMex.h"

#define DHT11_PIN 4
#define ONE_WIRE_BUS 2

dht11 DHT;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

byte humid;
byte temp;
float tempDallas;
byte humidInd;
byte tempInd;
char comfColour;
float MIN;
float MAX;

const int reset=10;
int statoreset=0;


//fill the array based on the colour chart
int comf[10][11] = {
  'B','B','B','R','R','R','R','R','R','R','\0',  //high humid
  'B','B','Y','Y','R','R','R','R','R','R','\0',
  'B','B','Y','Y','Y','R','R','R','R','R','\0',
  'B','B','Y','G','G','Y','Y','R','R','R','\0',
  'B','B','Y','G','G','G','Y','R','R','R','\0',
  'B','B','Y','G','G','G','Y','Y','R','R','\0',
  'B','B','B','Y','Y','G','Y','Y','R','R','\0',
  'B','B','B','B','Y','Y','Y','Y','R','R','\0',
  'B','B','B','B','B','B','B','R','R','R','\0',
  'B','B','B','B','B','B','B','R','R','R','\0',  //low humid
}; // 


void setup(){
/////////////////Clear EEPROM/////////////////////
/*{
  // write a 0 to all 512 bytes of the EEPROM
  for (int i = 0; i < 512; i++)
    EEPROM.write(i, 0);
    
  // turn the LED on when we're done
  digitalWrite(13, HIGH);
}*/
//////////////////////////////////////////////////

  sensors.begin();// inizializza sensore Dallas
  Serial.begin(9600);
  Serial.println("DHT COMFORT PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT11LIB_VERSION);
  Serial.println("Humidity (%),\tTemperature (C),\tComfort,\ttMin,\tTMAX");

}

void HumiTemp(){
//get data
  int chk;
  chk = DHT.read(DHT11_PIN);    // READ DATA
  humid = DHT.humidity;

MIN = EEPROM.readFloat(1);
MAX = EEPROM.readFloat(2);

sensors.requestTemperatures(); // Send the command to get temperatures
float tempDallas=sensors.getTempCByIndex(0);

  //calc indices into the 2d matrix
  humidInd =9- humid/10;

  if (temp%2==0)  //even temp
  {
    tempInd=(tempDallas/2)-8;
  }
  else  //odd temp
  {
    tempInd=(tempDallas/2)-7;
  }

  if (tempInd < 0) tempInd=0;
  if (tempInd > 9) tempInd=9;

  // get the current value from the array

  comfColour = comf[humidInd][tempInd];

  // DISPLAY DATA
  Serial.print(humid);
  Serial.print(",\t\t\t\t");
  Serial.print(tempDallas,2);
  Serial.print(",\t\t\t");
  
  if (comfColour == 'R')
  {
    Serial.print("Disconfort");}

  if (comfColour == 'G')
  {
    Serial.print("Confort");}

  if (comfColour == 'B')
  {
    Serial.print("Disconfort");}

  if (comfColour == 'Y')
  {
    Serial.print("Discreto");}

  Serial.print(",\t\t");

  Serial.print(MIN,2);
  Serial.print(",\t");
  Serial.println(MAX,2);

  if (tempDallas<MIN)
  {
    MIN=tempDallas;
    EEPROM.writeFloat(1,tempDallas);}

  if (tempDallas>MAX)
  {
    MAX=tempDallas;
    EEPROM.writeFloat(2,tempDallas);}
  

}


void loop(){

  HumiTemp();

 delay(5000);

}//loop

Schermata 2015-03-09 alle 12.52.18.png

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

La min la fai partire da 0, mettigli invece un valore molto alto, esempio min=100; nel setup()

Non è cambiato nulla! in più all'avvio non so perché la max memorizzata nella EEPROM è 85!!

Oltre ad inizializzare min con un valore alto, leva momentaneamente questo:
MIN = EEPROM.readFloat(1);

Perdonami, ma sono alle prime armi.
Allora adesso sembra funzionare meglio ma se abbasso la temperatura del sensore accade una cosa strana.
Si abbassa il valore massimo e non capisco perché!?

Schermata 2015-03-09 alle 18.03.49.png

Il mio intento, per questo ho pensato di usare l'EEPROM, è quello di tenere in memoria il valore massimo e minimo dal momento dell'accensione in poi.
Voglio aggiungere anche un RTC per avere l'ora e il calendario e magari azzerare la memoria dopo la mezzanotte in modo che il ciclo misura temperatura riparta da capo.
Almeno questa è la mia intenzione, non so se ci riuscirò poi!

Guarda la nuova libreria DHT di Adafruit. Ha anche il calcolo dell'indice.
--> https://github.com/adafruit/DHT-sensor-library

Non resettare la EEPROM ad ogni avvio sketch.

Inizializza le massime e minime in questo modo.

float MIN = 200;
float MAX = -200;

Distanzia gli indirizzi della EEPROM di 4 unita.
Primo indirizzo 1, secondo indirizzo 5, ecc.
Altrimenti sovrascrivi parte dei dati.

vitodotmac:
all'avvio non so perché la max memorizzata nella EEPROM è 85!!

85 e' un codice di errore del 18b20, e' normale che venga generato all'inizio delle letture

PaoloP:
Guarda la nuova libreria DHT di Adafruit. Ha anche il calcolo dell'indice.
--> GitHub - adafruit/DHT-sensor-library: Arduino library for DHT11, DHT22, etc Temperature & Humidity Sensors

Non resettare la EEPROM ad ogni avvio sketch.

Inizializza le massime e minime in questo modo.

float MIN = 200;

float MAX = -200;




Distanzia gli indirizzi della EEPROM di 4 unita.
Primo indirizzo 1, secondo indirizzo 5, ecc.
Altrimenti sovrascrivi parte dei dati.

Non resetto la eeprom ad ogni avvio, è tra /* */quella parte di codice. La uso solo per azzerare la memoria in fase di test.
Le variabili min e max le ho modificate come mi hai suggerito e eliminando la riga:

MIN = EEPROM.readFloat(1);

come suggerito da nid69ita funziona. Non ho ben capito perché così.
La mia domanda adesso è...il valore minimo come viene letto?
è superflua anche questa riga?

MAX = EEPROM.readFloat(5);

Perdonatemi ma sono qui anche per capire.
Grazie in anticipo per il prezioso aiuto!

Per prima cosa ti conviene realizzare il sistema che stampa i dati su seriale.
Successivamente quando sarà tutto corretto potrai salvare i dati giornalieri della massima e della minima su EEPROM.

Più che nella EEPROM ti consiglio di considerare l'acquisto di una shield con datalogger.
Ad esempio --> Adafruit Assembled Data Logging shield for Arduino : ID 1141 : $13.95 : Adafruit Industries, Unique & fun DIY electronics and kits
In quel modo potrai salvare i dati su SD compreso la data e l'orario.