Ciao ecco lo schema ed il codice
#include <DS1302.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// stato relay display
int s_ventola;
int s_umidificatore;
int s_temperatura;
int s_libero;
byte spento[8] = {
B00100,
B01010,
B10001,
B10001,
B10001,
B10001,
B01010,
B00100
};
byte acceso[8] = {
B00100,
B01110,
B11111,
B11111,
B11111,
B11111,
B01110,
B00100
};
// inizializzione relay
//pinliberi
const int pinalfa = 7;
const int pinbeta = 6;
//pin umidità
const int pinumidita = 8;
//pin ventola
const int pinventola = 9;
const int v_timer = 10;
int ventola;
// Creazione oggetto RTC
DS1302 rtc(2, 3, 4);
Time timp;
//INIZIALIZZAZIONE SENSORE TEMPERATURA
#include <dht11.h>
dht11 DHT;
#define DHT11_PIN 5
// Creazione dell'oggetto LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Imposta l'indirizzo LCD 0x27 per un display a 16 caratteri e 2 linee
int vumidificatore;
void setup()
{
pinMode (pinalfa, OUTPUT);
pinMode (pinbeta, OUTPUT);
//settaggio pinumidità
pinMode (pinumidita, OUTPUT);
//settaggio pinventola
pinMode (pinventola, OUTPUT);
// Imposta RTC in run-mode e disabilita' la protezione da scrittura
rtc.halt(false);
rtc.writeProtect(false);
// Imposta la comunicazione seriale
Serial.begin(9600);
// inizializza il display
lcd.init();
lcd.backlight();//accende la retroilluminazione
lcd.createChar(0, spento);
lcd.createChar(1, acceso);
}
void loop()
{
int readData = DHT.read(DHT11_PIN);
int t = (DHT.temperature);
int u = (DHT.humidity);
s_ventola=0;
s_umidificatore=0;
s_temperatura=0;
s_libero=0;
c_timer_ventola();
temp_tappeto();
c_umidificatore();
delay(3000);
lcd.clear();
for (int i=0; i <= 100; i++)
{
data (); // Scrive su LCD la data
ora (); // Scrive su LCD l'ora
}
lcd.clear();
stato_relay();
delay(3000);
}
void c_timer_ventola ()
{ int tt;
//variabile per visualizzare solo minuti associata a libreria TIME di ds1302
timp=rtc.getTime();
tt=(timp.min);
if (tt<10) {
lcd.setCursor(10,1);
lcd.print(' ');
lcd.print(tt);}
else {
lcd.setCursor(10,1);
lcd.print(tt);}
// accensione ventola
ventola = tt ;
if (ventola > v_timer){
digitalWrite(pinventola, HIGH);
s_ventola =1;
}
else
{digitalWrite(pinventola, LOW);
}
}
void temp_tappeto ()
{
int c_tappeto = (DHT.temperature);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperatura");
lcd.setCursor(13, 0);
lcd.print(c_tappeto);
lcd.print((char)223);
if (c_tappeto > 20) {
digitalWrite (pinbeta, HIGH);
s_temperatura =1;
}
else
{digitalWrite (pinbeta, LOW);
}
}
void c_umidificatore()
{
int u = (DHT.humidity);
const int x = 45;
lcd.setCursor(0, 1);
lcd.print("Umidita'");
lcd.setCursor(13, 1);
lcd.print(u);
lcd.print("%");
//accensione umidificatore
vumidificatore = u;
if (vumidificatore > x )
{digitalWrite(pinumidita, HIGH);
s_umidificatore =1;
}
else
{digitalWrite(pinumidita, LOW);
}
}
void data ()
{
lcd.setCursor(0, 0);
lcd.print(rtc.getDateStr());
}
void ora()
{
lcd.setCursor(0, 1);
lcd.print(rtc.getTimeStr());
}
void stato_relay()
{
lcd.setCursor(4,0);
lcd.print("U F T L");
if (s_umidificatore >= 1)
{
lcd.setCursor(4, 1);
lcd.write(0);
}
else
{
lcd.setCursor(4, 1);
lcd.write(1);
}
if (s_ventola >= 1)
{
lcd.setCursor(6, 1);
lcd.write(0);
}
else
{
lcd.setCursor(6, 1);
lcd.write(1);
}
if (s_temperatura >= 1)
{
lcd.setCursor(8, 1);
lcd.write(0);
}
else
{
lcd.setCursor(8, 1);
lcd.write(1);
}
if (s_libero = 0)
{
lcd.setCursor(10, 1);
lcd.write(0);
}
else
{
lcd.setCursor(10, 1);
lcd.write(1);
}
}
Ringrazio in anticipo