il codice che gira attualmente è questo:
#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,20,4);
DS3231 rtc(SDA, SCL);
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(20,4);
rtc.begin();
//rtc.setDOW(THURSDAY);
//rtc.setTime(19,15,00);
//rtc.setDate(24, 1, 2019);
lcd.setCursor(0, 1);
lcd.print("T:");
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()
{
//Bar 1
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.print(rtc.getDateStr());
// posiziono il cursore alla colonna 5 e riga 0
lcd.backlight();
lcd.setCursor(1, 0);
lcd.print(rtc.getTimeStr());
lcd.print("");
lcd.setCursor(2, 1);
lcd.print(t);
//lcd.setCursor(7, 1);
//lcd.print("C");
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();
}}
il display non mostra mai i dati correttamente, già dall'avvio inizia a dare simboli strani.
Domani ricomincio con un codice stabile, magari qualche esempio, per cercare di capire da dove nasce il problema.
grazie a tutti