sto modificando il codice originale sempre sul banco. eccolo:
#include <DS3232RTC.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Time.h>
#include <TimeLib.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,20,4);
DS3232RTC rtc;
time_t myTime;
#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 = 23; // Spegnimento luci alle 20:59:59
void setup()
{
lcd.init();
rtc.begin();
lcd.clear();
lcd.backlight();
setTime(19, 54, 00, 06, 3, 2019); //set the system time to 23h31m30s on 13Feb2009
lcd.setCursor(0, 1);
lcd.print("Temp:");
lcd.setCursor(11, 1);
lcd.print("Hu:");
lcd.setCursor(19, 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()
{
if (myTime >= OraAccensione && myTime < 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.print(rtc.getDateStr());
// posiziono il cursore alla colonna 5 e riga 0
//lcd.backlight();
lcd.setCursor(0, 0);
lcd.print (hour());
lcd.print(":");
lcd.print(minute());
lcd.print(":");
lcd.print(second());
lcd.setCursor(10, 0);
lcd.print(day());
lcd.setCursor(11, 0);
lcd.print("/");
lcd.print(month());
lcd.setCursor(13, 0);
lcd.print("/");
lcd.print(year());
lcd.setCursor(5, 1);
lcd.print(t);
//lcd.setCursor(7, 1);
//lcd.print("C");
lcd.setCursor(14, 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 (myTime >= OraSpegnimento || myTime < OraAccensione)
{
digitalWrite(relay_luci, LOW);
digitalWrite(relay_calore, LOW);
digitalWrite(relayVentolaEntrata, LOW);
digitalWrite(relayVentolaUscita, LOW);
// lcd.clear();
//lcd.noBacklight();
}}}
purtroppo se tolgo le // all'ultima riga del codice
//lcd.noBacklight();
il display si spegne dopo una frazione di secondo. come se non riconoscesse l'orario di accensione e spegnimento.
al momento comunque sembrerebbero risolti i problemi dei simboli strani.
domani provo a riportare tutto nello scatolato.
buonanotte