Non riesco a venirne a capo

dovresti postare il codice completo usando il simbolo #

comunque mi pare che in questa riga c'è qualcosa che non va

signed long time=+(hour()6060 + minute()*60 + second());//orario hr,min,sec ridotto in secondi

o è uguale o è piu

non vedo nemmeno un millis() :fearful:

Nella Guida sintetica di programmazione c'è scritto:

x += y // same as x = x + y, or increments x by +y

non so però se si possa scrivere anche nella forma =+

No. Le forme abbreviate di assegnamento prevedono prima il simbolo dell'operazione e poi il simbolo dell'uguale. Quindi x+=y è la forma corretta.

allora quello segnalato da Gingardu è un errore in quanto ha invertito i due operatori

Sicuramente è un errore. Poi ci possono magari essere anche errori logici, ma questi sono più difficili da interpretare se non si è nel "cranio" dell'autore del sorgente :stuck_out_tongue_closed_eyes:
Ad esempio, lo spezzone di codice dove sta? E' racchiuso nel loop()? Se sì, perché ad ogni ciclo imposta i pin in output?
Perché usa variabili di tipo int per numeri che possono arrivare max a 59? Perché specifica "signed" quando è implicito che un "int" sia un "signed int"? Perché vedo delay(10) infilati da tutte le parti? A che serve aspettare 10 ms dopo un digitalWrite?

Il tutto si comporta come se i numeri in alcuni casi fossero di segno opposto. Eh... il cranio mio è bello duro :grin: e tutte le domande di Leo hanno una sola risposta che le racchiude: perché sono ignorante e ho tutto da imparare su Arduino quindi il codice è scritto più a senso unito a pochi ricordi di C di quand'ero piccolo che con vera cognizione di causa... ecco perché spesso mi inceppo per stupidaggini che per voi sono scontate. Colgo l'occasione proprio per ringraziarvi per pazienza che avete e il sostegno che mi date. Ora sono col cel, appena arrivo al pc posto il codice intero. Di nuovo grazie a tutti.

ecco lo sketch, diviso in due parti sennò non mi entrava, abbiate pazienza e... grazie davvero a tutti

/*
/*
 * 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);
  
}
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);
  

 
 
   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
   signed int dim;
   signed int ora;
   signed int oras;
   int moonlight=7;//pin led lunari
   unsigned 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=81900;//23:15 ora spegnimento in millisecondi(ore*3600 minuti*60 secondi*1)*1000
   signed 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);}
  delay(10);
 /*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%");
  delay(10);
}

 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%");
  delay(10);
}

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%");
  delay(10);
}

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%");
  delay(10);
}

if (time >=ora+x*4&&time < ora+x*5)
  {
  analogWrite (ledw1,dim*16);
  analogWrite (ledw2,dim*14);
  analogWrite (leduv, dim*12);
  LCD.setCursor(0,1);
  LCD.print ("Alba 24%");
  delay(10);
}

if (time >= ora+x*5&&time<ora+x*6)
  {
  analogWrite (ledw1,dim*15);
  analogWrite (ledw2,dim*13);
  analogWrite (leduv, dim*11);
  LCD.setCursor(0,1);
  LCD.print ("Alba 30%");
  delay(10);
}
if (time >= ora+x*6&&time<ora+x*7)
  {
  analogWrite (ledw1,dim*14);
  analogWrite (ledw2,dim*12);
  analogWrite (leduv, dim*10);
  LCD.setCursor(0,1);
  LCD.print ("Alba 36%");
  delay(10);
}

if (time >= ora+x*7&&time<ora+x*8)
  {
  analogWrite (ledw1,dim*13);
  analogWrite (ledw2,dim*11);
  analogWrite (leduv, dim*9);
  LCD.setCursor(0,1);
  LCD.print ("Alba 42%");
  delay(10);
}

if (time >= ora+x*8&&time<ora+x*9)
  {
  analogWrite (ledw1,dim*12);
  analogWrite (ledw2,dim*10);
  analogWrite (leduv, dim*8);
  LCD.setCursor(0,1);
  LCD.print ("Alba 48%");
  delay(10);
}

if (time >= ora+x*9&&time<ora+x*10)
  {
  analogWrite (ledw1,dim*11);
  analogWrite (ledw2,dim*9);
  analogWrite (leduv, dim*7);
  LCD.setCursor(0,1);
  LCD.print ("Alba 54%");
  delay(10);
}
if (time >= ora+x*10 && time<ora+x*11)
  {
  analogWrite (ledw1,dim*10);
  analogWrite (ledw2,dim*8);
  analogWrite (leduv, dim*6);
  LCD.setCursor(0,1);
  LCD.print ("Alba 60%");
  delay(10);
}
if (time >= ora+x*11 && time<ora+x*12)
  {
  analogWrite (ledw1,dim*9);
  analogWrite (ledw2,dim*7);
  analogWrite (leduv, dim*5);
  LCD.setCursor(0,1);
  LCD.print ("Alba 66%");
  delay(10);
}

if (time >= ora+x*12 && time<ora+x*13)
  {
  analogWrite (ledw1,dim*8);
  analogWrite (ledw2,dim*6);
  analogWrite (leduv, dim*4);
  LCD.setCursor(0,1);
  LCD.print ("Alba 72%");
  delay(10);
}
if (time >= ora+x*13 && time<ora+x*14)
  {
  analogWrite (ledw1,dim*7);
  analogWrite (ledw2,dim*5);
  analogWrite (leduv, dim*4);
  LCD.setCursor(0,1);
  LCD.print ("Alba 78%");
  delay(10);
}
if (time >=ora+x*14 && time<ora+x*15)
  {
  analogWrite (ledw1,dim*6);
  analogWrite (ledw2,dim*4);
  analogWrite (leduv, dim*4);
  LCD.setCursor(0,1);
  LCD.print ("Alba 84%");
  delay(10);
}

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%");
  delay(10);
}
/*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");
  delay(10);
}
/*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");
  delay(10);
}

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");
  delay(10);
}

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");
  delay(10);
}

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");
  delay(10);
}

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");
  delay(10);
}

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");
  delay(10);
}

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");
  delay(10);
}

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");
  delay(10);
}

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");
  delay(10);
}


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");
  delay(10);
}

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");
  delay(10);
}

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");
  delay(10);
}

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");
  delay(10);
}
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");
  delay(10);
}

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");
  delay(10);
}

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");
  delay(10);
  
}

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");
  delay(10);
}

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");
  delay(10);
}
/*spegnimento completo dell'illuminazione, fase 'Notte' */
if (time >= oras+x*19 or time<ora)
  {
  analogWrite (ledw1,dim*18);
  analogWrite (ledw2,dim*18);
  analogWrite (leduv, dim*18);
  LCD.setCursor(0,1);
  LCD.print ("Notte"); }
 delay(10); 
  

}

Non era un richiamo, intendiamoci. :wink:

PS:
per il codice... sinceramente non posso mettermi a spulciare un sorgente del genere per capire dov'è l'errore.. :sweat_smile:
inizia intanto a sistemare quelle cose che ti sono state segnalate e poi riprova.

Tranquillo, la mia risposta era intesa simpaticamente, la cosa seria e' che davvero sto imparando mentre lo programmo, come diceva un famoso comico... di più nin zo' :frowning:

gingardu, dici 'non vedo nemmeno un millis', perchè ho convertito l'orario in secondi e non in millisecondi, è sbagliato? Cambierebbe qualcosa?

Perché usa variabili di tipo int per numeri che possono arrivare max a 59?

ore min e sec espressi in secondi arrivano a oltre 80000, perchè dici 59? Che variabili dovrei utilizzare?

Ad esempio, lo spezzone di codice dove sta? E' racchiuso nel loop()? Se sì, perché ad ogni ciclo imposta i pin in output?

I pin li ho impostati solo all'inizio,perchè dici che a ogni ciclo li reimposto?

se una variabile in qualsiasi sketc non superera mai i 255 conviene mettere byte ache se nessuno vieta di adoperare ache altre tipi (per il fatto di risparmiare byte)

ho dato una "sbirciata" al codice anche se concettualmente lo vedo semplicissimo

accendere spegnere led (+ scritte) in base al tempo che passa ci sono tante librerie
che ancora non ho mai usato/studiato quindi non sono in grado di darti il consiglio definitivo :~

fai dei tentativi e vedi se qualcosa va in overflow es un int che supera il valore consentito

sostituisci gli int con i long se hai ancora spazio

si, questo dei long e int l'ho fatto, ma il problema è che sembra che in certi punti legga un numero negativo al posto del positivo, se nel pezzo di codice che sta 'lavorando' cambio il > in < o viceversa funziona... almeno quella parte

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); 
  

}

sembra strano l'ultimo if :fearful:
a me pare piu corretto uno solo o ripeti l'intera "strofa"
o metti uno o l'altro

if (time >= oras+x*19 && time<=86399)
if (time <ora)

altrimenti se li vuoi mettere tutti e due ripeti tutto

if (time >= oras+x*19 && time<=86399)

{
analogWrite (ledw1,dim18);
analogWrite (ledw2,dim
18);
analogWrite (leduv, dim*18);
LCD.setCursor(0,1);
LCD.print ("Notte"); }
delay(10);

if (time <ora)
{
analogWrite (ledw1,dim18);
analogWrite (ledw2,dim
18);
analogWrite (leduv, dim*18);
LCD.setCursor(0,1);
LCD.print ("Notte"); }
delay(10);

oppure fai un or

if (time >= oras+x19 && time<=86399 || time <ora)
{
analogWrite (ledw1,dim
18);
analogWrite (ledw2,dim18);
analogWrite (leduv, dim
18);
LCD.setCursor(0,1);
LCD.print ("Notte"); }
delay(10);

infatti ho fatto così

if (time >= oras+x*19 && time<=86399)

  {
  analogWrite (ledw1,dim*18);
  analogWrite (ledw2,dim*18);
  analogWrite (leduv, dim*18);
  LCD.setCursor(0,1);
  LCD.print ("Notte"); }
  
  if (time>=0 && time<=ora+x)
  {
  analogWrite (ledw1,dim*18);
  analogWrite (ledw2,dim*18);
  analogWrite (leduv, dim*18);
  LCD.setCursor(0,1);
  LCD.print ("Notte"); }

se hai la seriale ancora libera (pin 0-1) pui sempre mettere dei serial print momentanei per vedere che succede man mano che funziona tutto,

ci sono solo 3-4 cose che trasformano "involontariamente " un numero positivo in negativo

overflow,

moltiplicarlo per un numero negativo ecc,

altra cosa,...indagherei sugli if: se un if viene eseguito, e attiva o modifica qualcosa, questa cosa rimarra sempre attiva se non gli metti un "contro" if

esempio: se metto
if (millis () > 1000 && millis () < 2000) digitalvrite (7, HIGH);

questa riga lascera inevitabilmente il pin 7 sempre alto se non metto qualcosa che lo riporti allo stato iniziale

Ogni pezzo di codice con if lavora in momenti differenti, ma ognuno contiene il comando per tutte e tre le linee, quindi non c'è un punto in cui sono scoperti, stamattina ad es, dopo che ieri sera dopo la mezzanotte ho controllato che funzionasse, verso le 11 ho trovato i pin che lavoravano bene ma il display vuoto, senza scritte, e' bastato ricaricare lo sketch ed è tornato tutto normale, come se ci fosse qualcosa che per un istante non abbia funzionato. C'è un modo per stabilizzare un codice? Non so, con dei delay, che fermano quando una parte del codice è vera, non saprei, mi sembra come se il tutto funzionasse, ma a volte...

Hai provato a guardare la libreria Time ? E' piuttosto potente e completa, e supporta l'uso di rtc su i2c come sorgente di tempo.