grazie, quegli articoli li avevo già letti tutti.
ti allego tutto il mio codice:
#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;
unsigned long tempo; // memorizza il tempo da quando Arduino è stato avviato
unsigned long ciclo_time = 0; // memorizza il tempo alla fine di ogni ciclo
int tempo_high=10000; // tempo in millisecondi in cui il rele deve rimanere acceso
int tempo_low=20000; // tempo in millisecondi in cui il rele deve rimanere spento
int relay_luci = 3; // PIN DEL RELè LUCE
int relayVentolaEntrata = 9;
int relayVentolaUscita= 10;
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 21:59:59
void setup()
{
{
rtc.begin();
//The following lines can be uncommented to set the date and time
//rtc.setDOW(THURSDAY);
//rtc.setTime(10,13,00);
//rtc.setDate(24, 1, 2019);
lcd.begin(16,2);
lcd.backlight();
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();
//Bar 1
if (ti.hour >= OraAccensione && ti.hour < OraSpegnimento)
{
digitalWrite(relay_luci, HIGH);
float h = dht.readHumidity();
float t = dht.readTemperature();
lcd.setCursor(1, 0);
lcd.print(rtc.getTimeStr());
lcd.print(" ");
//lcd.print(rtc.getDateStr());
/*lcd.print(":");
lcd.print(ti.min);
lcd.print(":");
lcd.print(ti.sec);
*/
// posiziono il cursore alla colonna 5 e riga 0
lcd.setCursor(0, 1);
lcd.print("T:");
lcd.setCursor(2, 1);
lcd.print(t);
//lcd.setCursor(7, 1);
//lcd.print("C");
lcd.setCursor(8, 1);
lcd.print("Hu:");
lcd.setCursor(10, 1);
lcd.print(h);
lcd.setCursor(15, 1);
lcd.print("%");
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);
}
}
{
tempo=millis(); //memorizza i millisecondi nella variabile tempo
if(tempo>ciclo_time+tempo_low) // se tempo è maggiore di (ciclo_time+tempo_low) accendi il rele
{
digitalWrite(relayVentolaEntrata, HIGH);
digitalWrite(relayVentolaUscita, HIGH);
}
if(tempo>ciclo_time+(tempo_low+tempo_high)) // se tempo è maggiore di (ciclo_time+(tempo_low+tempo_high)) spegni il rele
{
digitalWrite(relayVentolaEntrata, LOW);
digitalWrite(relayVentolaUscita, LOW);
ciclo_time=millis(); // finito il ciclo la variabile ciclo_time viene aggiornata con i millis() attuali
}
}}
else if (ti.hour >= OraSpegnimento || ti.hour < OraAccensione)
{
digitalWrite(relay_luci, LOW);
digitalWrite(relay_calore, LOW);
digitalWrite(relayVentolaEntrata, LOW);
digitalWrite(relayVentolaUscita, LOW);
}
}
}
}