ho modificato qualcosina... forse ora...l'ultimo if, nella fase 'notte', mi viene accettato dal sw, ma va bene scritto così? Visto che quando sono le 23:59:59, dopo un secondo si azzera il conto quidni l'affermazione 'time > di...' diventava falsa visto che a mezzanotte ricominciando da zero, 0 è perforza minore di time. Inoltre ho aggiunto un void contenente solo l'impostazione della luminosità, prima non sapendo come fare l'avevo 'infilato' nel void 'printDigits', credo che così sia più 'pulito'
/*
* TimeRTC.pde
* example code illustrating Time library with Real Time Clock.
*
*/
#include <LiquidCrystal.h>
#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t
LiquidCrystal LCD(12,11,5,4,3,2);
void setup() {
LCD.begin (16,2);
setSyncProvider(RTC.get); // the function to get the time from the RTC
}
void loop()
{
LCD.setCursor(0,0);
digitalClockDisplay();
delay(1000);
DS1307RTC();
}
void digitalClockDisplay(){
// digital clock display of the time
LCD.print(hour());
printDigits(minute());
LCD.setCursor(5,0);
printDigits(second());
LCD.print(" ");
}
void printDigits(int digits){
// utility function for digital clock display: prints preceding colon and leading 0
LCD.print(":");
if(digits < 10)
LCD.print('0');
LCD.print(digits);
}
void DS1307RTC(){
int ledw1=9;//pin linea led bianchi e rb posteriore
int ledw2=10;//pin linea led bianchi e rb anteriore
int leduv=6;//pin linea led rossi, verdi, uv
int dim;
int ora;
int oras;
int moonlight=7;//pin led lunari
long time=(hour()*60*60 + minute()*60 + second());//orario hr,min,sec ridotto in secondi
pinMode (ledw1,OUTPUT);
pinMode (ledw2, OUTPUT);
pinMode (leduv, OUTPUT);
pinMode (moonlight,OUTPUT);
dim=255/18;//aumento intensità per ogni step
ora=45000;//12:30 ora accensione in millisecondi(ore*3600 minuti*60 secondi*1)*1000
oras=83700;//23:15 ora spegnimento in millisecondi(ore*3600 minuti*60 secondi*1)*1000
int x=150;//intervallo in millisecondi tra un fade e un altro
/*impostazione per l'accensione deiled lunari*/
if (time > oras+x*2 or time<ora+x){
digitalWrite (moonlight, HIGH);
}
if (time < oras+x*2 && time>ora+x){
digitalWrite (moonlight, LOW);}
/*inizio della fase 'Alba' e aumento graduale dell'intensità dell'illuminazione*/
if ( time >= ora&&time <ora+x)
{
analogWrite (ledw1,dim*18);
analogWrite (ledw2,dim*18);
analogWrite (leduv, dim*16);
LCD.setCursor(0,1);
LCD.print ("Alba 0%");
}
if (time >= ora+x&&time<ora+x*2)
{
analogWrite (ledw1,dim*18);
analogWrite (ledw2,dim*18);
analogWrite (leduv, dim*14);
LCD.setCursor(0,1);
LCD.print ("Alba 6%");
}
if (time >= ora+x*2&&time < ora+x*3)
{
analogWrite (ledw1,dim*18);
analogWrite (ledw2,dim*16);
analogWrite (leduv, dim*14);
LCD.setCursor(0,1);
LCD.print ("Alba 12%");
}
if (time >= ora+x*3&&time < ora+x*4)
{
analogWrite (ledw1,dim*17);
analogWrite (ledw2,dim*15);
analogWrite (leduv, dim*13);
LCD.setCursor(0,1);
LCD.print ("Alba 18%");
}.........
.................
if (time >=ora+x*15 && time<ora+x*16)
{
analogWrite (ledw1,dim*5);
analogWrite (ledw2,dim*4);
analogWrite (leduv, dim*4);
LCD.setCursor(0,1);
LCD.print ("Alba 90%");
}
/*fase intermedia 'Giorno' nella quale l'illuminazione viene tenuta al massimo dell'intensità impostata e che va dalla fine dell'alba all'inizio della fase di decremento dell'illuminazione 'Tramonto' */
if (time >ora+x*16 && time <oras+x)
{
analogWrite (ledw1,dim*4);
analogWrite (ledw2,dim*4);
analogWrite (leduv, dim*4);
LCD.setCursor(0,1);
LCD.print ("Giorno");
}
/*inizio della fase 'Tramonto' e diminuzione graduale dell'intensità dell'illuminazione fino al completo spegnimento*/
if (time >=oras+x&&time <oras+x*2)
{
analogWrite (ledw1,dim*5);
analogWrite (ledw2,dim*4);
analogWrite (leduv, dim*4);
LCD.setCursor(0,1);
LCD.print ("Tramonto -42:30");
}
if (time >= oras+x*2&&time<oras+x*3)
{
analogWrite (ledw1,dim*6);
analogWrite (ledw2,dim*4);
analogWrite (leduv, dim*4);
LCD.setCursor(0,1);
LCD.print ("Tramonto -40:00");
}
if (time >= oras+x*3&&time<oras+x*4)
{
analogWrite (ledw1,dim*7);
analogWrite (ledw2,dim*4);
analogWrite (leduv, dim*4);
LCD.setCursor(0,1);
LCD.print ("Tramonto -37:30");
}
if (time >= oras+x*4&&time<oras+x*5)
{
analogWrite (ledw1,dim*8);
analogWrite (ledw2,dim*4);
analogWrite (leduv, dim*4);
LCD.setCursor(0,1);
LCD.print ("Tramonto -35:00");
}
if (time >= oras+x*5&&time<oras+x*6)
{
analogWrite (ledw1,dim*9);
analogWrite (ledw2,dim*4);
analogWrite (leduv, dim*5);
LCD.setCursor(0,1);
LCD.print ("Tramonto -32:30");
}
if (time >=oras+x*6&&time<oras+x*7)
{
analogWrite (ledw1,dim*10);
analogWrite (ledw2,dim*4);
analogWrite (leduv, dim*6);
LCD.setCursor(0,1);
LCD.print ("Tramonto -30:00");
}
if (time >=oras+x*7&&time<oras+x*8)
{
analogWrite (ledw1,dim*11);
analogWrite (ledw2,dim*4);
analogWrite (leduv, dim*7);
LCD.setCursor(0,1);
LCD.print ("Tramonto -27:30");
}
if (time >=oras+x*8&&time<oras+x*9)
{
analogWrite (ledw1,dim*12);
analogWrite (ledw2,dim*6);
analogWrite (leduv, dim*8);
LCD.setCursor(0,1);
LCD.print ("Tramonto -25:00");
}
if (time >=oras+x*9&&time<oras+x*10)
{
analogWrite (ledw1,dim*13);
analogWrite (ledw2,dim*7);
analogWrite (leduv, dim*9);
LCD.setCursor(0,1);
LCD.print ("Tramonto -22:30");
}
if (time >= oras+x*10&&time<oras+x*11)
{
analogWrite (ledw1,dim*14);
analogWrite (ledw2,dim*9);
analogWrite (leduv, dim*10);
LCD.setCursor(0,1);
LCD.print ("Tramonto -20:00");
}
if (time >= oras+x*11&&time<oras+x*12)
{
analogWrite (ledw1,dim*15);
analogWrite (ledw2,dim*10);
analogWrite (leduv, dim*10);
LCD.setCursor(0,1);
LCD.print ("Tramonto -17:30");
}
if (time >= oras+x*12&&time<oras+x*13)
{
analogWrite (ledw1,dim*16);
analogWrite (ledw2,dim*11);
analogWrite (leduv, dim*10);
LCD.setCursor(0,1);
LCD.print ("Tramonto -15:00");
}
if (time >= oras+x*13&&time<oras+x*14)
{
analogWrite (ledw1,dim*17);
analogWrite (ledw2,dim*14);
analogWrite (leduv, dim*10);
LCD.setCursor(0,1);
LCD.print ("Tramonto -12:30");
}
if (time >= oras+x*14&&time<oras+x*15)
{
analogWrite (ledw1,dim*17);
analogWrite (ledw2,dim*15);
analogWrite (leduv, dim*11);
LCD.setCursor(0,1);
LCD.print ("Tramonto -10:00");
}
if (time >= oras+x*15&&time<oras+x*16)
{
analogWrite (ledw1,dim*18);
analogWrite (ledw2,dim*16);
analogWrite (leduv, dim*11);
LCD.setCursor(0,1);
LCD.print ("Tramonto -7:30");
}
if (time >=oras+x*16&&time<oras+x*17)
{
analogWrite (ledw1,dim*18);
analogWrite (ledw2,dim*17);
analogWrite (leduv, dim*11);
LCD.setCursor(0,1);
LCD.print ("Tramonto -5:00");
}
if (time >= oras+x*17&&time<oras+x*18)
{
analogWrite (ledw1,dim*18);
analogWrite (ledw2,dim*18);
analogWrite (leduv, dim*14);
LCD.setCursor(0,1);
LCD.print ("Tramonto -2:30");
}
if (time >= oras+x*18&&time<oras+x*19)
{
analogWrite (ledw1,dim*18);
analogWrite (ledw2,dim*18);
analogWrite (leduv, dim*16);
LCD.setCursor(0,1);
LCD.print ("Tramonto -2:30");
}
/*spegnimento completo dell'illuminazione, fase 'Notte' */
if (time >= oras+x*19 && time<=86399)
if (time <ora)
{
analogWrite (ledw1,dim*18);
analogWrite (ledw2,dim*18);
analogWrite (leduv, dim*18);
LCD.setCursor(0,1);
LCD.print ("Notte"); }
delay(10);
}