Decimali temperatura ds18b20

Buongiorno ho un problema con la stampa su lcd 20x4 della temperatura di un acquario marino con sensore ds18b20.
Praticamente ogni tanto mi segna la temperatura con tre decimali quando io la voglio a due.
Qualcuno mi può aiutare????
grazie

Io non ho visto il programma

ma posso ipotizzare

non e' per caso che ti stampa la temperatura a 3 decimali quando il numero di cifre prima della virola è minore?

ovvero quando magari la scritta si accorcia?

magari è solo che non viene cancellata l'ultima cifra che era stata stampata la volta prima...

poi magari mi son sbagliato alla grande...

No non può essere perche' la temperatura viene scritta sempre nello stesso punto.

e fa sempre due cifre prima e due dopo la virgola?

no, scusa, e alle volte tre dopo la virgola?

Qualche volta durante la giornata tre dopo la virgola che poi è lo 0 la terza cifra

Cosí per curiosità: Perché scrivere 2 decimali ? Non basta 1 ?
Comunque mi spare strano te ne scriva 3, prima di scrivere nuovamente usi il .clear ?

Ci vuoi far vedere il Tuo sketch o vuoi che continuiamo a ipotizziare?
Ciao Uwe

#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DS3231.h>
#include <LiquidCrystal_I2C.h>
#define ONE_WIRE_BUS 36
OneWire ourWire(ONE_WIRE_BUS);
DallasTemperature sensors(&ourWire);
DS3231  rtc(SDA, SCL);
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

void setup() { 
rtc.begin();
//rtc.setTime(16,16,00);
//rtc.setDate(03,07,2017);
 

 lcd.backlight(); 
 lcd.begin(20,4);
 sensors.begin();

}

void loop() { 

lcd.setCursor(0,0);
//lcd.print("Date: ");
lcd.print(rtc.getDateStr());
 
lcd.setCursor(12,0);
//lcd.print("Time: ");
lcd.print(rtc.getTimeStr());

sensors.requestTemperatures();
lcd.setCursor(0,1);
lcd.print("Reef: ");
lcd.print(sensors.getTempCByIndex(0));
lcd.setCursor(12,1);
lcd.print((char)223); 
lcd.print("C");

lcd.setCursor(0,2);
lcd.print("Sump: ");
lcd.print(sensors.getTempCByIndex(1));
lcd.setCursor(12,2);
lcd.print((char)223); 
lcd.print("C");
//delay(1000); 
}

Quando resetto torna normale

Ecco una foto

Prima cosa ti consiglio di racchiudere il codice con i tag come da regolamento. Se non te lo dico io te lo dice Guglielmo meglio. :slight_smile:

Edita il messaggio e usa la funzione che ha questi simboli </>

Comunque come sospettavo non usi il .clear
Implementalo ogni volta che devi riscrivere nella stessa riga. :wink:

> Gae: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post #7 (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

Guglielmo

Come si usa il clear?

... l'hai letto bene il mio post ? ? ? :o :o :o

Perché c'è esattamente scritto quello che devi fare !

Guglielmo

Gae:
Come si usa il clear?

lcd.clear();
e rimetti quel delay di 1 secondo altrimenti sfarfalla. E poi leggere la temperatura meglio ogni tot tempo, di continuo come fai ora non ha molto senso.

Oppure, dovrebbe funzionare:

lcd.setCursor(0,1);
lcd.print("Reef:        ");  // 8 spazi per cancellare 
lcd.setCursor(6,1);      
lcd.print(sensors.getTempCByIndex(0));

Nello sketch dove lo posiziono
Se rimetto il delay l'orologio mi va avanti di 2 secondi alla volta

Gae:
Nello sketch dove lo posiziono

Cosa ? Il clear o il pezzo che ti ho scritto ?

Per il delay, capito. allora sarebbe meglio usare la millis() e quando passano 1 o 2 secondi leggere e ristampare la temperatura (l'ora/data invece ristamparla sempre)

Con il millisecondi come si fa mi potete aiutare

Guarda l'esempio BlinkWithoutDelay, memorizzi il tempo di millis() quando sono passati 1 o 2 secondi (1000 o 2000) allora leggi temperatura e la stampi su lcd

Il clear lo usi prima di scrivere di nuovo sulla stessa riga, te l ho detto :slight_smile: