inserite le 4,7kOhm pullup come suggerito, le 2,2kOhm non le ho al momento.
allego le foto della situazione. quando carico il codice con usb il monitor impazzisce completamente (foto 1).
stacco l'alimentazione e riattacco, la situazione è come in foto 2 e 3. allego il codice nuovo con le modifiche apportate come suggerito ( il codice è diverso da prima, è la versione con isteresi).
ho provato anche a caricare il codice senza alimentare i relè e senza l'alimentazione "proibita" dei led cob, ma non cambia nulla.
non capisco come mai fino a lunedi era tutto funzionante e ora fa cosi, l'impianto e il codice sono cosi da più di un mese.
grazie
#include <DS3231.h>
 #include <LiquidCrystal_I2C.h>
 #include <Wire.h>
 #include <Time.h>
 #include <TimeLib.h>
 #include <DHT.h>
 #include "DHT.h"
 #define DHTPIN 6 // 6 è il pin di Arduino a cui collego il sensore di temperatura
 #define DHTTYPE DHT22 // dht22 è il tipo di sensore che uso
 DHT dht(DHTPIN, DHTTYPE);
Â
 #define Isteresi 3
 #define TempImpostata 22
 LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
 DS3231 rtc(SDA, SCL);
 // Init a Time-data structure
 Time ti;
Â
 #define PAUSA 600000
 #define DURATA 60000
 unsigned long t1=0;
 byte on=0;
 int relay_luci = 3; // PIN DEL RELè LUCE
 int relayVentolaEntrata = 10;
 int relayVentolaUscita= 9;
 int relay_calore = 8; //calore
 //Setup light cycle for both bars
 const int OraAccensione = 6;  //Accensione luci alle 6:00:00
 const int OraSpegnimento = 21;  // Spegnimento luci alle 20:59:59
Â
void setup()
{
 lcd.begin(16,2);
 lcd.backlight();
 rtc.begin();
 //rtc.setDOW(THURSDAY); Â
 //rtc.setTime(19,15,00); Â
 //rtc.setDate(24, 1, 2019);
Â
Â
 lcd.setCursor(0, 1);
 lcd.print("T:");
 lcd.setCursor(7, 1);
 lcd.print("C");
 lcd.setCursor(8, 1);
 lcd.print("Hu:");
 lcd.setCursor(15, 1);
 lcd.print("%");
 pinMode(relay_luci, OUTPUT);
 digitalWrite(relay_luci,LOW);
 pinMode(relayVentolaEntrata, OUTPUT);
 digitalWrite(relayVentolaEntrata, LOW);
 pinMode(relayVentolaUscita, OUTPUT);
 digitalWrite(relayVentolaUscita, LOW);
 pinMode(relay_calore, OUTPUT);
 digitalWrite(relay_calore, LOW);
}
void loop()
{
 ti = rtc.getTime();
 if (ti.hour >= OraAccensione && ti.hour < OraSpegnimento)
{
if(millis()-t1>PAUSA && on==0)
 {on=1; digitalWrite(relayVentolaUscita, HIGH);digitalWrite(relayVentolaEntrata, HIGH);} // Se è trascorsa la pausa, accende
if(millis()-t1>PAUSA+DURATA)
 {on=0; t1 =millis(); digitalWrite(relayVentolaUscita, LOW);digitalWrite(relayVentolaEntrata, LOW);} // Se è trascorsa anche la durata, spegne e azzera.
 digitalWrite(relay_luci, HIGH);
 float h = dht.readHumidity();
 float t = dht.readTemperature();
 lcd.setCursor(1, 0);
 lcd.print(rtc.getTimeStr());
 lcd.print(" ");
 lcd.setCursor(2, 1); Â
 lcd.print(t);
 lcd.setCursor(10, 1);
 lcd.print(h);
Â
if (t > TempImpostata)
{
 if (t > TempImpostata + Isteresi)
{
 digitalWrite(relay_calore, LOW);
 //digitalWrite(relayVentolaEntrata, HIGH);
 //digitalWrite(relayVentolaUscita, HIGH);
}
 else
{
 digitalWrite(relay_calore, LOW);
 //digitalWrite(relayVentolaEntrata, LOW);
 //digitalWrite(relayVentolaUscita, LOW);
}Â
}
 else
{
 if (t < TempImpostata - Isteresi)
{
 digitalWrite(relay_calore, HIGH);
 //digitalWrite(relayVentolaEntrata, LOW);
 //digitalWrite(relayVentolaUscita, LOW);
}
}}
 else if (ti.hour >= OraSpegnimento || ti.hour < OraAccensione)
{
 digitalWrite(relay_luci, LOW);
 digitalWrite(relay_calore, LOW);
 digitalWrite(relayVentolaEntrata, LOW);
 digitalWrite(relayVentolaUscita, LOW);
// lcd.clear();
 lcd.noBacklight();
Â
}}