problema lettura secondi RTC

danidiscus:
cosa ne pensi ?

delay = veleno.
poi ti imbastisco uno schizzetto: ti mosto come si può fare nel tuo prg.... in due parole per anticipartelo allo scatto di una determinata "data/ora" dobbiamo settare un flag di "inizio fade" e poi nel ciclo nel caso che queso flag sia attivato gestiremo con la funzione millis questo fade di modo che non blocchi null'altro... devi vederti per capire l'esempio blink without delay: quella è sempre la strada maestra per la risoluzione di questi problemi.
Comunque dopo ti risolvo.

ecco qua.
soliti avvisi di sempre: ci sono sicuramente errori e bisogna fare un controllo generale.
Magari se posti il codice attuale non sarebbe male.

Immagino che la fase di fade poi duri qualche ora?

#include <DallasTemperature.h>
#include <OneWire.h>
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
#define ONE_WIRE_BUS 8


OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float temperatura;

 
char buffer[10];
 
RTC_DS1307 RTC;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
void setup () {
    sensors.begin();
    Wire.begin();
    RTC.begin();
    lcd.begin(20, 4);
 
    RTC.sqw(1);  // qsecofr: MI DA ERRORE: NON POSSO CORREGGERE IO
    if (! RTC.isrunning()) {
      RTC.adjust(DateTime(__DATE__, __TIME__));
    }
    
    
    
    // qsecofr: questa istruzione disattiva l'attesa della conversione
    
  sensors.setWaitForConversion(false);   
    
}
 
 
 
 bool fadeUp = false;            // 29/12
 bool fadeDown = false;         // 29/12
 byte ValorePorta = 0;
long  oldMillisFade=0;           // 29/12 
 
  
byte oldSecond =0;       //QSECOFR

byte richiestaTemperatura=0;   //Qsecofr
long oldMillis; //qsecofr


 
void loop () {
    DateTime now = RTC.now();
    
 
    

 
//    delay(1000);        //QSECOFR

    if (oldSecond != now.second()) { //qsecofr sono cambiati i secondi...
      
          // 29/12    ...poi metterai anche i minuti e le ore...
          // fa scattare il fadeup quando i secondi dell'orologio sono a 0
          // fa scattare il fadedown quando i secondi dell'orologio sono a 30
          if ((now.second==0) && !fadeUp){
                fadeUp = true;
                oldMillisFade = millis();
                };
          if (now.second==30 && !fadeDown) 
                {fadeDown = true;
                oldMillisFade = millis();
                };
          //end 29/12...poi vedi alla fine
          
      
           //stampa data ed ora
          sprintf(buffer,  "%02d/%02d/%d", now.day(), now.month(), now.year());
          lcd.setCursor(0, 1);
          lcd.print("Data  ");
          lcd.print( buffer );
      
          char buffer[10] = "";
      
          sprintf(buffer,  "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
          lcd.setCursor(0, 0);
          lcd.print("Time   ");
          lcd.print( buffer );

          oldSecond = now.second();                //qsecofr: aggiorna i vecchi secondi
          
      
          // lettura analogica
          temperatura=analogRead(A0);
          lcd.setCursor(0, 2);
          lcd.print("Temp esterna ");
          lcd.print((5.0*temperatura*100.0)/1024.0);
          lcd.write(0b011011111);
          lcd.print("C");

      
      
          // lettura 1-wire...lenta ed in attesa. 
          if (richiestaTemperatura == 0) {
                 sensors.requestTemperatures(); // Invia il comando di lettura delle temperatura... non è più bloccante quindi il risultato si avrà fra 750 millisecondi.
                 richiestaTemperatura = 1;   // questa variabile indica che ho richiesto una lettura della temperatura
                 oldMillis = millis();
           }
           
   
      }  //endif sono cambiati i secondi
      
      
      long ciccio = millis();
      if ((richiestaTemperatura == 1) 
       {
         if (ciccio-oldMillis > 750) {
           {
           richiestaTemperatura = 0;
           lcd.setCursor(0, 3); 
           lcd.print("Temp H2o");
           lcd.setCursor(10, 3);
           lcd.print (sensors.getTempCByIndex(0));
           lcd.print (" C"); 
           lcd.write(0b11011111);
          }
        }
    
    
    
    // 29/12
  
    if (fadeUp) {
      long ms = millis()-oldMillisFade;
      ms = ms / 10;    ' fa uno step ogni 10 millisecondi....il fade totale dura 2.55sec              
      if (ms > 254 )     
        { //fade up completo
          ms =255;     //whatch dog.. non credo serva ma è per sicurezza
          fadeUp = false;
      
        };
        analogWrite(CHEPORTA?,ms);
        
      };
      
     if (fadeDown) {
      long ms = millis()-oldMillisFade;
      ms = ms / 10;    ' fa uno step ogni 10 millisecondi....il fade totale dura 2.55sec              
      ms = 255-ms;
      if (ms < 1 )     
        { //fade up completo
          ms =0;     //whatch dog.. non credo serva ma è per sicurezza
          fadeDown = false;
      
        };
        analogWrite(CHEPORTA?,ms);
        
      };

  
  
    
 
  };

ancora una volta mi stupisce la tua reattività nel creare e rispondere alle mie domande,
ho caricato il code, mi da un errore credo sia una parentesi, ti allego:

         if (now.second==0 && !fadeUp) {

sketch_dec29k.ino: In function 'void loop()':
sketch_dec29k:68: error: invalid use of member (did you forget the '&' ?)
sketch_dec29k:72: error: invalid use of member (did you forget the '&' ?)
sketch_dec29k:118: error: expected )' before '{' token sketch_dec29k:161: error: expected statement at end of input sketch_dec29k:161: error: expected }' at end of input

danidiscus:
ancora una volta mi stupisce la tua reattività nel creare e rispondere alle mie domande,
ho caricato il code, mi da un errore credo sia una parentesi, ti allego:

         if (now.second==0 && !fadeUp) {

sketch_dec29k.ino: In function 'void loop()':
sketch_dec29k:68: error: invalid use of member (did you forget the '&' ?)
sketch_dec29k:72: error: invalid use of member (did you forget the '&' ?)
sketch_dec29k:118: error: expected )' before '{' token sketch_dec29k:161: error: expected statement at end of input sketch_dec29k:161: error: expected }' at end of input

Correggi now.second
con

 now.second()

Poi qui

 long ciccio = millis();
      if ((richiestaTemperatura == 1) 
       {
         if (ciccio-oldMillis > 750) {

c'è una parentesi aperta di troppo dopo l'if. :grin:

Ma che libreria RTC stai usando?
EDIT: Trovata--> http://www.futurashop.it/download/RTClib.zip :grin:

Compila ma non ho idea se e come funzioni.
Ho messo il pin PWM numero 3 (cambia il define se non è quello)

#include <DallasTemperature.h>
#include <OneWire.h>
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
#define ONE_WIRE_BUS 8

#define PWMPORT 3
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float temperatura;
char buffer[10];
RTC_DS1307 RTC;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
bool fadeUp = false;            // 29/12
bool fadeDown = false;         // 29/12
byte ValorePorta = 0;
long  oldMillisFade=0;           // 29/12 
byte oldSecond =0;       //QSECOFR
byte richiestaTemperatura=0;   //Qsecofr
long oldMillis; //qsecofr

void setup () {
  sensors.begin();
  Wire.begin();
  RTC.begin();
  lcd.begin(20, 4);
  RTC.sqw(1);
  if (! RTC.isrunning()) {
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
  // qsecofr: questa istruzione disattiva l'attesa della conversione
  sensors.setWaitForConversion(false);   
}

void loop () {
  DateTime now = RTC.now();
  //    delay(1000);        //QSECOFR
  if (oldSecond != now.second()) { //qsecofr sono cambiati i secondi...
    // 29/12    ...poi metterai anche i minuti e le ore...
    // fa scattare il fadeup quando i secondi dell'orologio sono a 0
    // fa scattare il fadedown quando i secondi dell'orologio sono a 30
    if (now.second()==0 && !fadeUp){
      fadeUp = true;
      oldMillisFade = millis();
    }
    if (now.second()==30 && !fadeDown) 
    {
      fadeDown = true;
      oldMillisFade = millis();
    };
    //end 29/12...poi vedi alla fine

    //stampa data ed ora
    sprintf(buffer,  "%02d/%02d/%d", now.day(), now.month(), now.year());
    lcd.setCursor(0, 1);
    lcd.print("Data  ");
    lcd.print( buffer );
    char buffer[10] = "";
    sprintf(buffer,  "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
    lcd.setCursor(0, 0);
    lcd.print("Time   ");
    lcd.print( buffer );

    oldSecond = now.second();                //qsecofr: aggiorna i vecchi secondi

    // lettura analogica
    temperatura=analogRead(A0);
    lcd.setCursor(0, 2);
    lcd.print("Temp esterna ");
    lcd.print((5.0*temperatura*100.0)/1024.0);
    lcd.write(0b011011111);
    lcd.print("C");
    // lettura 1-wire...lenta ed in attesa. 
    if (richiestaTemperatura == 0) {
      sensors.requestTemperatures(); // Invia il comando di lettura delle temperatura... non è più bloccante quindi il risultato si avrà fra 750 millisecondi.
      richiestaTemperatura = 1;   // questa variabile indica che ho richiesto una lettura della temperatura
      oldMillis = millis();
    }
  }  //endif sono cambiati i secondi

  long ciccio = millis();
  if (richiestaTemperatura == 1) 
  {
    if (ciccio-oldMillis > 750) {
      {
        richiestaTemperatura = 0;
        lcd.setCursor(0, 3); 
        lcd.print("Temp H2o");
        lcd.setCursor(10, 3);
        lcd.print (sensors.getTempCByIndex(0));
        lcd.print (" C"); 
        lcd.write(0b11011111);
      }
    }

    // 29/12

    if (fadeUp) {
      long ms = millis()-oldMillisFade;
      ms = ms / 10;    // fa uno step ogni 10 millisecondi....il fade totale dura 2.55sec              
      if (ms > 254 )     
      { //fade up completo
        ms =255;     //whatch dog.. non credo serva ma è per sicurezza
        fadeUp = false;
      }
      analogWrite(PWMPORT,ms);
    }

    if (fadeDown) {
      long ms = millis()-oldMillisFade;
      ms = ms / 10;    // fa uno step ogni 10 millisecondi....il fade totale dura 2.55sec              
      ms = 255-ms;
      if (ms < 1 )     
      { //fade up completo
        ms =0;     //whatch dog.. non credo serva ma è per sicurezza
        fadeDown = false;
      }
      analogWrite(PWMPORT,ms);
    }
  }
}

grazie per l'intervento, ora funziona, cavolo, sembrava meno ripida la strada arduino.
sarà che in questo periodo ho il cervello in pappa, ma non ci capisco più niente. bah!
:blush:

qsecofr:
immagino che la fase di fade poi duri qualche ora?

dovrebbe durare circa 40 minuti da 0 a 100% in accensione e più o meno in spegnimento da 100% a 0

danidiscus:

qsecofr:
immagino che la fase di fade poi duri qualche ora?

dovrebbe durare circa 40 minuti da 0 a 100% in accensione e più o meno in spegnimento da 100% a 0

non ti preoccupare per la strada ripida. l'importante è piuttosto che tu comprenda perchè ho fatto il codice così.

ora abbiamo impostato un codice che legge ora e temperatura correttamente e che riesce a lanciare i fade correttamente (e la modifica per farli funzionare a 40 minuti o a certi orari è veramente semplice). Immagino tu abbia un relay da attivare per scaldare l'acqua...anche se a suo tempo qualche uccellino mi ha detto che il problema è più che altro tenerla fredda d'estate... servono celle di peltier? hai altri relay?

io sinceramente vedo al tuo progetto 2 ostacoli: il primo è di fare un bel menu con le possibili impostazioni (orari di on off, cibo, settaggi temperatura eccetera)... imho non è esattamente banale da gestire ma suvvia: "lo si fa".
L'altro problema è hardware: il fade su fluorescente... decisamente diverso da un led... però proviamo: non so magari ci sono già i controlli quasi fatti.

ancora non ho i relay, ma sto cercando di capire pian pianino cosa serve, la vasca la sto allestendo da zero, intanto ho costruito il mobile, la vasca e stata ordinata aspetto che arrivi, ma visto che siamo sotto feste penso che arrivi il prossimo anno.
ora studio bene le funzioni che vorrei inserire, per il raffreddamento non serve perchè è una vasca di acqua dolce. non so se conosci la razza DISCUS

danidiscus:
ancora non ho i relay, ma sto cercando di capire pian pianino cosa serve, la vasca la sto allestendo da zero, intanto ho costruito il mobile, la vasca e stata ordinata aspetto che arrivi, ma visto che siamo sotto feste penso che arrivi il prossimo anno.
ora studio bene le funzioni che vorrei inserire, per il raffreddamento non serve perchè è una vasca di acqua dolce. non so se conosci la razza DISCUS

azzarola: hai fatto quel mobile con le pietre da solo? bravo!

No purtroppo te l'ho detto conosco solo i pesci commestibili e l'unico pesce da acquario (neanche tanto) spacciato per commestibile sarebbe il pescetto rosso che è una carpa (se la memoria non mi inganna)... però se c'è un pesce veramente orrendo e difficile da mangiare è la carpa.
Ho guardato questi pesci: veramente bellissimi... ma fammi capire: tu li hai già allevati per il passato o stai provando ora? e domanda ignorante: c'è un pesce "facile" per approcciare questo hobby?
Andiamo al tuo progetto: ho letto che bisogna essere abbastanza precisi con ph e conducibilità: è vero? è determinante?... le buone notizie sono sulla conducibilià: con arduino è abbastanza facile: tieniti una analogica libera e procurati un elettrodo che li friggiamo :grin:
...la brutta notizia è sul ph: sarebbe affascinante imho misurarlo ma le sonde costano una botta di soldi (ho visto che costano dai 70 euro in su quelli della hanna). Quando avevo 18 anni circa ne avevo costruita una artigianalmente ma mi ricordo che non era stabile nel tempo per via dei materiali impiegati allora... non era manco una cosa semplicissima: mi pare che serviva una membrana semipermeabile... che chiaramente non avevo).

qsecofr:

danidiscus:
ancora non ho i relay, ma sto cercando di capire pian pianino cosa serve, la vasca la sto allestendo da zero, intanto ho costruito il mobile, la vasca e stata ordinata aspetto che arrivi, ma visto che siamo sotto feste penso che arrivi il prossimo anno.
ora studio bene le funzioni che vorrei inserire, per il raffreddamento non serve perchè è una vasca di acqua dolce. non so se conosci la razza DISCUS

azzarola: hai fatto quel mobile con le pietre da solo? bravo!

No purtroppo te l'ho detto conosco solo i pesci commestibili e l'unico pesce da acquario (neanche tanto) spacciato per commestibile sarebbe il pescetto rosso che è una carpa (se la memoria non mi inganna)... però se c'è un pesce veramente orrendo e difficile da mangiare è la carpa.
Ho guardato questi pesci: veramente bellissimi... ma fammi capire: tu li hai già allevati per il passato o stai provando ora? e domanda ignorante: c'è un pesce "facile" per approcciare questo hobby?
Andiamo al tuo progetto: ho letto che bisogna essere abbastanza precisi con ph e conducibilità: è vero? è determinante?... le buone notizie sono sulla conducibilià: con arduino è abbastanza facile: tieniti una analogica libera e procurati un elettrodo che li friggiamo :grin:
...la brutta notizia è sul ph: sarebbe affascinante imho misurarlo ma le sonde costano una botta di soldi (ho visto che costano dai 70 euro in su quelli della hanna). Quando avevo 18 anni circa ne avevo costruita una artigianalmente ma mi ricordo che non era stabile nel tempo per via dei materiali impiegati allora... non era manco una cosa semplicissima: mi pare che serviva una membrana semipermeabile... che chiaramente non avevo).

Ebbene si, nella realizzazione manuale vado piuttosto bene, mi frega la teoria, come hai già potuto capire.
si il pesce rosso appartiene alla famiglia delle carpe, e si li allevavo in passato, prima di trasferirmi, per l'approccio di questo mondo non è difficile, bisogna rispettare alcune regole, mentre per i DISCUS la cosa cambia un po, anche se sono rimasto indietro , e leggendo ho scoperto di allevamenti che accrescono e allevano i DISCUS in acque normali, solitamente vogliono acque di OSMOSI con PH basso 6,5/7 conducibilità bassa 150 250 micro.
Quindi si può realizzare un misuratore di conducibilità facilmente? cosa serve ? per il PH credo che prenderò un misuratore a tascabile, oppure userò i reagenti, possiedo già uno della hanna dovrei cambiare la sonda, che come hai già detto costa un botto.
ti allego due foto della realizzazione del mobile, un lavoraccio durato quasi tre settimane, fuori al freddo a -2° =(
cmq ancora grazie per il tuo aiuto, sei una persona gentilissima
ps se ti va dimmi il tuo nome così mi viene più facile salutari XD

roberto è il nome.
si la conducibilità è abbastanza semplice: in pratica si tratta di misurare gli ohm tra due elettrodi (che assumiamo che troverai inossidabili...il codice ed il sistema si trova con google facilmente)... unica avvertenza è di misurare gli ohm per brevissimi intervalli altrimenti cominci a fare elettrolisi dell'acqua... anche i normali tester multifunzione che sono in giro non vanno molto bene per lo scopo proprio perchè dopo pochi istanti cominci a vedere importanti variazioni negli ohm.
Serve per capire quanti sali sono disciolti in acqua: per esempio il sale da cucina ha ph sostanzialmente 7 come l'acqua... è neutro diciamo... quindi con un semplice phametro non capisci quanto sale hai nell'acqua: lo puoi capire solo se misuri la resistenza dell'acqua in quanto il sale discolto si dissocia rendendo conduttiva l acqua... è molto importante se fai soluzioni fisiologiche... per i pesci speravo sinceramente che fossero un po' più do bocca buona ma vedo che la cosa interessa...

per aggiungere l'accensione e lo spegnimento ad un orario stabilito, devo lavorare in queste righe, giusto?

void loop () {
  DateTime now = RTC.now();
  //    delay(1000);        //QSECOFR
  if (oldSecond != now.second()) { //qsecofr sono cambiati i secondi...
    // 29/12    ...poi metterai anche i minuti e le ore...
    // fa scattare il fadeup quando i secondi dell'orologio sono a 0
    // fa scattare il fadedown quando i secondi dell'orologio sono a 30
    if (now.second()==0 && !fadeUp){
      fadeUp = true;
      oldMillisFade = millis();
    }
    if (now.second()==30 && !fadeDown) 
    {
      fadeDown = true;
      oldMillisFade = millis();
    };
    //end 29/12...poi vedi alla fine

if ((now.second()==secStart) && (now.minute()==minStart) && (now.hour()==oraStart) && !fadeUp)

qsecofr:
if ((now.second()==secStart) && (now.minute()==minStart) && (now.hour()==oraStart) && !fadeUp)

if ((now.second()==0)  && (now.minute()==23)  && (now.hour()==00) && !fadeUp){
      fadeUp = true;
      oldMillisFade = millis();
    }
    if ((now.second()==0)  && (now.minute()==26)  && (now.hour()==00) && !fadeDown) 
    {
      fadeDown = true;
      oldMillisFade = millis();

ok?
ora dimmi se è corretto questo passaggio "per favore :-)"

if (fadeUp) {
      long ms = millis()-oldMillisFade;
      ms = ms / 10;    // fa uno step ogni 10 millisecondi....il fade totale dura 2.55sec              
      if (ms > 254 )     
      { //fade up completo
        ms =255;     //whatch dog.. non credo serva ma è per sicurezza
        fadeUp = false;
      }
      analogWrite(PWMPORT,ms);
    }

    if (fadeDown) {
      long ms = millis()-oldMillisFade;
      ms = ms / 10;    // fa uno step ogni 10 millisecondi....il fade totale dura 2.55sec              
      ms = 255-ms;
      if (ms < 1 )     
      { //fade up completo
        ms =0;     //whatch dog.. non credo serva ma è per sicurezza
        fadeDown = false;
      }
      analogWrite(PWMPORT,ms);

in questo caso il led passa da 0 a 100% in 2,55 secondi,
se volessi modificare la durata devo cambiare così?

if (fadeUp) {
      long ms = millis()-oldMillisFade;
      ms = ms / 7050;    // fa uno step ogni 10 millisecondi....il fade totale dura 2.55sec              
      if (ms > 254 )     
      { //fade up completo
        ms =255;     //whatch dog.. non credo serva ma è per sicurezza
        fadeUp = false;
      }
      analogWrite(PWMPORT,ms);
    }

    if (fadeDown) {
      long ms = millis()-oldMillisFade;
      ms = ms / 7050;    // fa uno step ogni 10 millisecondi....il fade totale dura 2.55sec              
      ms = 255-ms;
      if (ms < 1 )     
      { //fade up completo
        ms =0;     //whatch dog.. non credo serva ma è per sicurezza
        fadeDown = false;
      }
      analogWrite(PWMPORT,ms);

cosi i tempi si allungano in quasi 30 minuti,per essere precisi in 29,9625 sec.
ti prego dimmi che è giusto :roll_eyes:

si: attenzione solo di non sovrapporre la fase di fadeup a quella di fadedown se no viene fuori un casino... quindi tieni sempre più di mezz'ora tra le due fasi.... non lo stai facendo.

Ho letto che c'è gente che usa al posto delle lampade fluorescenti delle righe di led: sicuramente sarebbe più semplice da controllare (e sicuramente più costoso) ma mi chiedo: i led hanno le giuste frequenze? che luce abbisognano questi pesci?

qsecofr:
si: attenzione solo di non sovrapporre la fase di fadeup a quella di fadedown se no viene fuori un casino... quindi tieni sempre più di mezz'ora tra le due fasi.... non lo stai facendo.

Ho letto che c'è gente che usa al posto delle lampade fluorescenti delle righe di led: sicuramente sarebbe più semplice da controllare (e sicuramente più costoso) ma mi chiedo: i led hanno le giuste frequenze? che luce abbisognano questi pesci?

Mi sa tanto che opto per i LED, considerando che non si tratta di marino quindi non necessitano di una notevole quantità di luce. Stavo pensando di farmi fare 4 tubi con strip LED da +o- 35 lumen/LED con 1 red, 1 royal blue e 2 bianchi ma con ºK differenti.
Di questi tubi vorrei che si accendessero in fasi diverse.
Tipo: nella scala di 1ora da 0-100% blu nella prima 30min poi si aggiunge il rosso dopo 15 min partono i bianchi per avere tutto ON in 60 minuti. Secondo te se po fa?
Ps perche in fase di accensione spegnimento si da il valore 255?

ms = 255-ms;

Questo codice:

long ms = millis()-oldMillisFade;
ms = ms / 7050;

è concettualmente sbagliato.

Una variabile di tipo "long" può contenere solo numeri INTERI, cioè senza virgola.
Se il risultato della divisione fra ms e 7050 è inferiore a 0, ms conterrà 0. Se il risultato sarà 1.2, ms conterrà 1. Se il risultato sarà 1.9, ms conterrà 1. ecc...

leo72:
Questo codice:

long ms = millis()-oldMillisFade;

ms = ms / 7050;



è concettualmente sbagliato.

Una variabile di tipo "long" può contenere solo numeri INTERI, cioè senza virgola.
Se il risultato della divisione fra ms e 7050 è inferiore a 0, ms conterrà 0. Se il risultato sarà 1.2, ms conterrà 1. Se il risultato sarà 1.9, ms conterrà 1. ecc...

quindi per avere una scala di tempo di 30 minuti dovrei fare 7060*255fade completo/1000"ms"/60"un minuto" per ottenere 30,005 che verra letto come 30
giusto?

leo72:
Questo codice:

long ms = millis()-oldMillisFade;

ms = ms / 7050;



è concettualmente sbagliato.

Una variabile di tipo "long" può contenere solo numeri INTERI, cioè senza virgola.
Se il risultato della divisione fra ms e 7050 è inferiore a 0, ms conterrà 0. Se il risultato sarà 1.2, ms conterrà 1. Se il risultato sarà 1.9, ms conterrà 1. ecc...

non l'ho testato... non ho nulla per poterlo testare...non ho ben capito perchè è sbagliato.... be... ecco... diremo che ms non è il nome di variabile più adatto... vi spiego cosa volevo creare così mi dite se e dove sbaglio:

  • il long l'ho usato perchè ho pensato che si potesse avere un tramonto lungo di passa una ora... quindi 1000ms*60secondi = 60.000... 2^15 fa 32000 e rotti se non uso il segno arrivo a 64000 e rotti ma ci stò un po' troppo a pennello.
    poi ho diviso il long per un tempo: inizialmente era di 10ms per fare una rampa rapida di debug ed ora è stato posto a 7000 e rotti... nelle mie intenzioni ogni uno di questi step (7000) si ha l'incremento di ms che poi viene sfruttato dal analogwrite... cioè sale a scalini... del troncamento della divisione me ne sono fregato: non mi sono proprio posto il problema tanto ho già 256 scalini che sono più che sufficenti.

il 255 del fadeDown è perchè il 100% dell'uscita in pwm ce l'hai con 255 (se non hai picchignato con i timer).... quindi per pigrizia mentale di trovare altre soluzioni ho fatto il down uguale all'up solo invertendo il valore scritto con 255-ms...

per mettere più "fade" puoi fare altri codici fadeup e fadedown usando delle nuove variabili (fadeup_2 fadedown_2) e duplicando anche l'oldMillisFade e usando altre uscite nel analogwrite
Oppure si può mettere poco prima del analogwrite si mette un if e se il segnale è maggiore o minore di tot si accende o si spengono dei bit.
Attenzione che il fade funziona se il led è attaccato su un'uscita pwm (quelle contrassengate con la cedilia o come cavolo si chiama l'ondina :grin:)