[RISOLTO] visualizzare su display temperatura minima e massima

Sono iscritto da molto tempo,ma questo è il mio primo messaggio-Sto realizzando con arduino un termometro che mi indica su di un display la temperatura attuale,la temperatura massima e quella minima.
Ho cercato su google ed ho trovato l’ottimo progetto di Daniele Alberti.Ho scritto un programma utilizzando molto di quello di Alberti.Questo programma evidenzia sul display la temperatura attuale e la minima,mentre la massima corrisponde sempre a quella attuale.Ho cercato sul forum,ma non ho trovato cio’ che mi interessava.Allego il mio programma,vi ringrazio anticipatamente:

#include <Adafruit_Sensor.h>
#include <EEPROM.h>
#include "DHT.h"
#include <LiquidCrystal_I2C.h>


LiquidCrystal_I2C lcd(0x27, 20, 4);
#define DHTPIN 2
#define DHTTYPE DHT11 
DHT dht(DHTPIN, DHTTYPE);

const int reset = 10;
int statoreset = 0;
byte MIN;
byte MAX;




void setup(){
   Serial.begin(9600);


  dht.begin();
  lcd.init();
  lcd.backlight();
  
 lcd.print("TEMP ATTUALE");
 lcd.setCursor(0,1);
 lcd.print("MIN");
 lcd.setCursor(9,1);
 lcd.print("MAX");
//scrivo sul display i caratteri fissi
 
// pinMode(reset, INPUT);
// digitalWrite(10, HIGH);

MIN = EEPROM.read(1);
MAX = EEPROM.read(2);
// MIN e MAX assumono i due valori contenuti nella memoria EEPROM

 
 
}

void loop(){

  int t = dht.readTemperature();

 if (t > MAX)
 MAX = t;
 EEPROM.write(2, t);
 // se la temperatura supera il dato MAX allora modifico il dato MAX
 // scrivo questo dato anche nella eeprom
 
 if (t < MIN)
 MIN = t;
 EEPROM.write(1, t);
 // se la temperatura è minore del dato MIN allora modifico il dato MIN
 // scrivo questo dato anche nella eeprom
 
 statoreset = digitalRead (reset);
 if( statoreset = LOW)
 MIN = t;
 MAX = t;
 // premendo il tasto reset porto MIN e MAX al valore di temp attuale

 lcd.setCursor(14, 0);
 lcd.print(t);
 lcd.setCursor(5, 1);
 lcd.print(MIN);
 lcd.setCursor(13, 1);
 lcd.print(MAX);
// scrittura dati sul display
 
 delay(100);

  
}

Edita il post precedente e metti il vodice nei tag code [code ] e [/code ] (senza lo spazio)

Scusami non sono molto pratico.Se ho capito bene devo inserire il codice fra le parentesi quadre:

[ codice ].Ti prego di darmi conferma,non vorrei sbagliare.Grazie

>gaerix: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo primo post (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).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non avrai sistemato il codice come richiesto, nessuno ti potrà rispondere, quindi ti consiglio di farlo al più presto. :wink:

Ti ringrazio,ho fatto come hai detto,spero sia andato tutto bene.

gaerix:
Ti ringrazio,ho fatto come hai detto,spero sia andato tutto bene.

Perfetto, grazie :slight_smile:

Guglielmo

gaerix:

 if( statoreset = LOW)

MIN = t;
MAX = t;

L'errore è nelle righe che ho quotato. Se non metti le parentesi graffe per indicare al compilatore cosa è posto sotto la condizione if e cosa è fuori da essa, automaticamente viene considerata sotto condizione solo la prima istruzione. Quindi MIN=t; viene eseguita solo quando statoreset==LOW, mentre MAX=t viene eseguita sempre ad ogni ciclo di programma.

Ti ringrazio,ho effettuato le modifiche da te proposte e tutto è andato bene.
Allego il listato corretto

#include <Adafruit_Sensor.h>
#include <EEPROM.h>
#include "DHT.h"
#include <LiquidCrystal_I2C.h>


LiquidCrystal_I2C lcd(0x27, 20, 4);
#define DHTPIN 2
#define DHTTYPE DHT11 
DHT dht(DHTPIN, DHTTYPE);

const int reset = 10;
int statoreset = 0;
byte MIN;
byte MAX;




void setup(){
   Serial.begin(9600);


  dht.begin();
  lcd.init();
  lcd.backlight();
  
 lcd.print("TEMP ATTUALE");
 lcd.setCursor(0,1);
 lcd.print("MIN");
 lcd.setCursor(9,1);
 lcd.print("MAX");
//scrivo sul display i caratteri fissi
 
// pinMode(reset, INPUT);
// digitalWrite(10, HIGH);

MIN = EEPROM.read(1);
MAX = EEPROM.read(2);
// MIN e MAX assumono i due valori contenuti nella memoria EEPROM

 
 
}

void loop(){

  int t = dht.readTemperature();

 if (t > MAX)
 MAX = t;
 EEPROM.write(2, t);
 // se la temperatura supera il dato MAX allora modifico il dato MAX
 // scrivo questo dato anche nella eeprom
 
 if (t < MIN)
 MIN = t;
 EEPROM.write(1, t);
 // se la temperatura è minore del dato MIN allora modifico il dato MIN
 // scrivo questo dato anche nella eeprom
 
 statoreset = digitalRead (reset);
 if( statoreset = LOW)
 {
 MIN = t;
 MAX = t;

 }
 // premendo il tasto reset porto MIN e MAX al valore di temp attuale

 lcd.setCursor(14, 0);
 lcd.print(t);
 lcd.setCursor(5, 1);
 lcd.print(MIN);
 lcd.setCursor(13, 1);
 lcd.print(MAX);
// scrittura dati sul display
 
 delay(100);

  
}