Non riesco a venirne a capo

Io proverei a stampare sulla seriale i valori all'interno delle condizioni if(). Cioè time e i due valori calcolati con cui lo confronti.

allora, se davanti a ora e oras metto 'int' da vera la fase giorno sia di giorno che di notte, se metto 'long' da vera la fase di notte sempre in entrambe i casi... tra un pò spacco tutto... è illogico!!!

allora, se davanti a ora e oras metto 'int' da vera la fase giorno sia di giorno che di notte, se metto 'long' da vera la fase di notte sempre in entrambe i casi... tra un pò spacco tutto... è illogico!!!

Una variabile di tipo int non può contenere un valore di 45000,guarda quì

int

Description
Integers are your primary datatype for number storage, and store a 2 byte value. This yields a range of -32,768 to 32,767 (minimum value of -2^15 and a maximum value of (2^15) - 1).

edit. Quindi è normale che superato il suo massimo valore positivo ti dia poi un valore negativo

questo è vero.
Un int va da -32768 a +32767 mentre un unsigned int va da 0 a 65535, in entrambi i casi non arrivi al max numero di secondi di un giorno, 86400. Ti serve un long per forza.

long

Description
Long variables are extended size variables for number storage, and store 32 bits (4 bytes), from -2,147,483,648 to 2,147,483,647.

E' un po un spreco ma non credo sia possibile fare diversamente.....

si, ma vista la formula per portare hr min sec in secondi dovrei avere un valore, alle 22 avrò 79200, invece dà come risultato circa 13000, se aggiungo alla formula *2 mi dà naturalmente 26000 se provo 4 mi da 4268647983 che non c'entra nulla con 130004.

si, ma vista la formula per portare hr min sec in secondi dovrei avere un valore, alle 22 avrò 79200, invece dà come risultato circa 13000, se aggiungo alla formula *2 mi dà naturalmente 26000 se provo 4 mi da 4268647983 che non c'entra nulla con 130004.

E che variabile stai usando ?

long
ora ho aggiunto questa riga

 time = time*5;

ma con il 5 da un risultato reale, fino a 5,9 se invece metto 6 sballa. Ipotesi, 15=5.....15,9=5,9.....16=6,5....

Ti converrebbe cercare di risolvere il problema dei numeri negativi scrivendo un piccolo sketch che contenga soltanto il codice minimo necessario ad analizzare (e comprendere) questo problema.
Metti le routine di conversione e stampa dei risultati, poi fai varie prove.
E posta il codice che stai usando.
A forza di frasi smozzicate e "si ferma" "non va", ecc. non si va da nessuna parte.

IMHO, sia chiaro...

mettendo 5,9 mi da 80300 mentre se metto 6 mi da 92000 e passa

questo è il codice completo

/*
 * 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);
 Serial.begin(9600);
 setSyncProvider(RTC.get); 
   DS1307RTC();  
}

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);
}
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
   float dim;
    unsigned long ora;
    unsigned long  oras;
   int moonlight=7;//pin led lunari
   unsigned long  time=((hour()*60*60) + (minute ()*60) + second());//orario hr,min,sec ridotto in secondi//cambiato da unsigned int a int
   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 
LCD.clear();
 time = time*5,99999;
/*impostazione per l'accensione deiled lunari*/

 
  if (time > oras+x*2 &&  time <=86399){
    digitalWrite (moonlight, HIGH);
  }
  if (time >= ora*0 && time <=ora+x*2){
    digitalWrite (moonlight, HIGH);
  }
  if (time <= oras+x*2&&  time>ora+x*2){
  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*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%");

}

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

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

}

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

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

}

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

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

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

}

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

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

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

}

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 -45:00");

}

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 -42:30");

}

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 -40:00");

}

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 -37:30");

}

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 -35:00");

}

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 -32:30");

}

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 -30:00");

}

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 -27:30");

}

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 -25:00");

}


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 -22:30");

}

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 -20:00");

}

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 -17:30");
  
}

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 -15:00");
  
}
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 -12:50");
  
}

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 -10:00");
  
}

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 -7:30");
  
  
}

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 -5:00");
  
}

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

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

}

Mi sembra tutto molto strano.....
Sembra che usi una unsigned int che ha come capacità un numero fino a 65535 e ti spiego perchè...
Come tu dici ,alle 22 dovresti leggere un valore di 79200 ma siccome la unsigned int arriva fino a 65535 quello che leggerai sarà pari a
79200-65535=13655........se moltiplichi 79200 per 2 avrai 158400 quindi riempi la variabile più di una volta 158400-65535-65535=27330 che dovrebbe essere il valore che leggi.....se moltiplichi però per numeri più alti,secondo i tuoi esempi, i conti non tornano più.
Ridai una sistemata al codice controllando bene le variabili e poi magari posta il tutto,è più facile poterti aiutare.

edit.mentre scrivevo lo hai già fatto :wink:

no non è int è long

Si infatti ma facendo i conti sembrava lo fosse..

mi sta venendo un altro dubbio, ma le fasi di alba e tramonto 'funzionano' quindi lì riconoscel'orario.... :cold_sweat:

Di tutto cuore ho gli occhi che iniziano ad incrociarsi :sleeping:
Sicuramente mi viene da escludere che il problema siano le varie if.....dovresti provare a fare la stampa degli orari in serial monitor e,partendo da lì ,vai avanti seguendo il codice fino ad individuare l'intoppo...

l'ho fatto ma come dicevo prima, non so perchè, ad esempio facendo ore3600 + min60+sec se sono le 22:00:00 dovrebbe venire 79200 invece stampando time su seriale mi da un valore vicino a 15000, ma l'orario segnato sull'lcd è giusto

è possibile che arduino abbia 'problemi' a fare le operazioni?

è possibile che arduino abbia 'problemi' a fare le operazioni?

Non è quello il problema,se fai un calcolo ed il risultato ci sta nella capacità della variabile è tutto ok.
Io proverei a stampare sul serial monitor l'ora che ricevi dal ds1307....Non conosco quella libreria e non so che formato di dati ti fornisce.
Usi hour() ,minute() ,second() ma che numero ti stampa in serial monitor?