Massime e minime giornaliere

Come per il post in hardware, siccome mi chiedevo una cosa di software la chiedo qui...
Per far segnare la massima e la minima di temperatura giornaliera, ovvero da 00:00 alle 23:59, come si puo fare con la libreria time? oppure con un'altra... avete un esempio di sketch?

Guarda che nella libreria Time ci sono anche gli esempi.
Con l'esempio timeserial.ino puoi impostare l'ora via seriale ( usando il formato UTC )

oppure c'e' anche la libreria RTCLIB ( GitHub - adafruit/RTClib: A fork of Jeelab's fantastic RTC library ) piu' semplice da usare e dove tra gli esempi c'e' la softrtc

Si ho fatto tutto... però volevo sapere, per dirgli che se il giorno si incrementa di uno resetta le massime e minime come devo fare?

Ci sono riuscito! Ci ho ragionato e ho usato questo codice

  Serial.print("Tempo= ");
  Serial.print(hour());
  Serial.print(":");
  Serial.print(minute());
  Serial.print(":");
  Serial.print(second());
  Serial.println("");
 
  Serial.print("Data= ");
  Serial.print(day());
  Serial.print("/");
  Serial.print(month());
  Serial.print("/");
  Serial.print(year());
  Serial.println("");
 
  //esegui ogni secondo
  delay(1000);

 
 if ((hour()==0)&&(minute()==0)&&(second()<10))
  {
    tempmax=sensors.getTempCByIndex(0);
    tempmin=sensors.getTempCByIndex(0);
  }

if (sensors.getTempCByIndex(0)>tempmax)
  {
    tempmax=sensors.getTempCByIndex(0);
  }
  if (sensors.getTempCByIndex(0)<tempmin)
  {
    tempmin=sensors.getTempCByIndex(0);
  }

Praticamente appena vede che le ore sono a zero i minuti pure e i secondi minori di 10 resetta tutto
ho messo i secondi minori di 10 perché uguale a 0 anche loro molte volte non li prendeva e continuava come se niente fosse

Perché guardare l’ora e non direttamente se il giorno è diverso da prima?

Sinceramente perché non sapevo come fare in quel modo… ovvero nel dirgli che se il giorno è diverso da quello attuale, allora fai quest’altro, non sapevo come fare allora ho fatto così
Se magari sai come fare con il giorno, una conoscenza in più non fa male! :wink:

Beh ... basta studiarsi la Time ... c'è un bel metodo che si chiama day() ...
... basta che confronti che sia diverso dal precedente (che ti salvi) e sei certo che il giorno è cambiato :wink:

Guglielmo

gpb01:
Beh ... basta studiarsi la Time ... c'è un bel metodo che si chiama day() ...
... basta che confronti che sia diverso dal precedente (che ti salvi) e sei certo che il giorno è cambiato :wink:

Guglielmo

Si però non è più lungo rispetto a questo? Ovvero lo so che day segna i giorni però devo dirgli di memorizzare che giorno è, poi confrontarlo nel if se diverso, alla fine, anche così si risolve il problema :wink: Comunque grazie del consiglio, il problema che non ricordo nemmeno come fare a memorizzare che giorno è, poi mettergli se è diverso quello è una cavolata ma non ricordo la memorizzazione.... Devo includere pure la eeprom o sbaglio?

Dimenticate sempre che avete una bellissima funzione che si chiama loop() e che gira in continuazione (... salvo che dentro voi non fate cose bloccanti) :slight_smile:

Ti dichiari una variabile dove salvare il giorno ...

byte giornoSalvato;

... nella funzione setup() la inizializzi con il valore del giorno all'avvio del programma ...

giornoSalvato = day();

... e nella loop() fai il controllo ...

if ( giornoSalvato != day() ) {
** // è cambiato il giorno, salvo il nuovo giorno**
** giornoSalvato = day();**
** // faccio quello che devo fare (solo una volta quando cambia il giorno)**
** ....**
** ....**
}

Più semplice di così si muore :smiley:

Guglielmo

Grazie mille, e grazie delle dritte! :smiley: :wink:

Figurati … :slight_smile:

Piuttosto, piccolo consiglio per un corretto uso del forum … quando quoti un post, spesso NON è necessario riportarlo tutto, basta qualche riga per far capire a chi legge a cosa ti riferisci. Addirittura, se la risposta segue il post, non è neanche necessario il quote :slight_smile:

Così il post ed il thread rimangono più compatti e si spreca meno spazio.

Guglielmo

Modificato sopra il quote :wink:
Comunque allora praticamente il programma adesso è così:

 if (giornoSalvato != day()) 
  {

    tempmax=sensors.getTempCByIndex(0);
    tempmin=sensors.getTempCByIndex(0);
    
  }

if (sensors.getTempCByIndex(0)>tempmax)
  {
    tempmax=sensors.getTempCByIndex(0);
  }
  if (sensors.getTempCByIndex(0)<tempmin)
  {
    tempmin=sensors.getTempCByIndex(0);
  }

Ti sei dimenticato una riga ...

if (giornoSalvato != day()) 
 {

   giornoSalvato = day();
   tempmax=sensors.getTempCByIndex(0);
   tempmin=sensors.getTempCByIndex(0);
   
 }

... altrimenti, come cambia giorno ... entra in continuazione li, mentre deve entrarci solo UNA volta :wink:

Guglielmo

Subito corretta adesso, ci ho riflettuto un attimo poi sono entrato qui e ho visto che me l'avevi segnalata :smiley:
Perché se no praticamente è sempre diverso poi, perché non viene aggiornato il giorno e quindi lo fa in continuazione quell'if finché non passa un mese che è di nuovo uguale xd