Aiuto con Fade

Salve, vista la mia poca esperienza chiedevo un aiuto per modificare il seguente codice:

/*
 Fade

 This example shows how to fade an LED on pin 9
 using the analogWrite() function.

 This example code is in the public domain.
 */

int led = 9;           // the pin that the LED is attached to
int brightness = 0;    // how bright the LED is
int fadeAmount = 5;    // how many points to fade the LED by

// the setup routine runs once when you press reset:
void setup()  { 
  // declare pin 9 to be an output:
  pinMode(led, OUTPUT);
} 

// the loop routine runs over and over again forever:
void loop()  { 
  // set the brightness of pin 9:
  analogWrite(led, brightness);    

  // change the brightness for next time through the loop:
  brightness = brightness + fadeAmount;

  // reverse the direction of the fading at the ends of the fade: 
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ; 
  }     
  // wait for 30 milliseconds to see the dimming effect    
  delay(10000);                            
}

vorrei che il mio led rimanesse alla massima intensità per un tot di millisecondi (mi serivrebbe 8 ore) Il ciclo di Arduino mi conta fino al tempo prestabilito? grazie mille

Se arrivato alla massima luminosità non devi fare altro nel tuo sketch, puoi mettere un delay di adeguata lunghezza. Delay accetta un unsigned long per cui puoi impostare dei periodi di diversi giorni. http://arduino.cc/en/Reference/Delay

scusami ma non ho capito bene, o non mi sono spiegato bene, il mio led una volta arrivato alla massima luminosità vorrei che ci rimanesse per un tempo di 8 ore, non voglio che arrivi alla massima luminosità in 8 ore ma solo che ci si mantenga al max per 8 ore. È possibile questo? grazie mille

Sì, è possibile. Lo avevo specificato un po' troppo implicitamente.

leo72: Se arrivato [il led] alla massima luminosità [tu] non devi fare altro nel tuo sketch, puoi mettere un delay di adeguata lunghezza.

Quindi potresti fare il controllo così:

if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ; 
    if (brightness == 255) {
      delay(28800000); //8 ore
    }
}

Ripeto, sempre se non devi fare altro. Perché quel delay blocca l'Arduino per 8 ore...

Grazie mille Leo ora ho capito ... scusami ma veramente sono alle prime armi, mi ci vorrebbe un bel corso di arduino, sto leggendo un po in internet ma non è sempre facile e intuitivo arrivare alla soluzione.

Già che ci sono ti chiedo anche un altra cosa, ho modificato il codice cosí per far si che per le restanti 15 ore (senza contare il fade) rimanga il led a 0:

/*
 Fade

 This example shows how to fade an LED on pin 9
 using the analogWrite() function.

 This example code is in the public domain.
 */

int led = 9;           // the pin that the LED is attached to
int brightness = 0;    // how bright the LED is
int fadeAmount = 5;    // how many points to fade the LED by

// the setup routine runs once when you press reset:
void setup()  { 
  // declare pin 9 to be an output:
  pinMode(led, OUTPUT);
} 

// the loop routine runs over and over again forever:
void loop()  { 
  // set the brightness of pin 9:
  analogWrite(led, brightness);    

  // change the brightness for next time through the loop:
  brightness = brightness + fadeAmount;

  // reverse the direction of the fading at the ends of the fade: 
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ; 
    if (brightness == 255) 
      delay(28800000); //8 ore
    if (brightness == 0) 
      delay(54000000); //15 ore
    }

  // wait for 30 milliseconds to see the dimming effect    
  delay(1800000); //                 
}

Ora il problema è che il led non si spegne del tutto ma rimane al minimo dell'intensità. C'è un modo perchè si spenga del tutto? grazie ancora

Devi capire che un programma è una serie di istruzioni che sono eseguite in SEQUENZA, una dietro l'altra. Tu scrivi:

  analogWrite(led, brightness);    
  brightness = brightness + fadeAmount;

Perciò tu PRIMA regoli la luminosità con il vecchio valore e DOPO la modifichi. In questo modo il LED resterà "spento" con il valore di 5 e resterà anche acceso con il valore di 250.

Quindi, devi prima modificare il valore della luminosità e poi regolare il led. In buona sostanza, inverti quelle 2 istruzioni. ;)

Eh si è proprio così ... cavoli grazie veramente. Sto cercando di applicare il tutto per comandare una plafoniera led (vedi post plafoniera led 6x3W) per un acquario. L'ultimo dubbio che ho è che se un sistema di questo genere mi può far evitare di comprare (ma non per la spesa se non altro per la scrittura del software che non saprei fare) la shield RTC, nel senso che quel delay finale:

// aspetta 36 sec. per il dimming delay(36000); //

mi ritarda sempre il tutto di 36 secondi, e con il tempo credo che diventerebbe un problema o sbaglio?

Diventerebbe un grosso problema perché il risonatore ceramico usato sull’Arduino introduce una notevole discrepanza fra l’orario reale e quello misurato, che può arrivare anche ad una decina di minuti al giorno. Quindi nel giro di un mese potresti avere l’accensione completamente sfalsata rispetto a come dovrebbe essere.

Ora il difficile è aggiungere la parte del RTC, e dire ad Arduino come accendere la plafoniera ad un orario prestabilito e spegnerla ad un altro.
Ho caricato la libreria del RTC ma non saprei come modificare il codice :

/*
 ALba-Tramonto
 */

int led = 9;           // Pin collegamento plafoniera 1
int led1= 11;          // Pin collegamento plafoniera 2
int brightness = 0;    // how bright the LED is
int fadeAmount = 1;    // how many points to fade the LED by

// the setup routine runs once when you press reset:
void setup()  { 
// declare pin 9 to be an output:
pinMode(led, OUTPUT);
pinMode(led1, OUTPUT);
} 

// the loop routine runs over and over again forever:
void loop()  { 

// change the brightness for next time through the loop:
brightness =  brightness + fadeAmount;
  
// set the brightness of pin 9:
analogWrite(led, brightness);
// set the brightness of pin 11:
analogWrite(led1, brightness);  

// reverse the direction of the fading at the ends of the fade: 
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ; 
if (brightness == 255) 
delay(28800000); // 8 ore plafoniera accesa
if (brightness == 0) 
delay(54000000); // 15 ore plafoniera spenta
    }

// 36 sec. dimming effect    
delay(36000); //                 
}

aiutooooooooo.
ringrazio anticipatamente.
Un saluto

Ti consiglio di dare un occhio al progetto che trovi qui http://arduino.cc/forum/index.php?topic=141419.0 La gestione di una plafo è già implementata nello sketch postato dall'utente riciweb. Il programma è molto articolato e vi sono molte funzioni ma quello che stai cercando di fare lo trovi nelle funzioni "StatoLuci" e "GestioneFotoperiodo".

Grazie mille Pespe, ho dato un occhiata al bellissimo lavoro che sta facendo Riccardo e al suo codice. Sto cercando di estrapolarne un po i dati ceh servirebbero a me, ma non è per niente semplice, forse perchè non ho abbastanza conoscimento di Arduino. Magari chiedo un aiuto anche a Riccardo e vediamo cosa salta fuori. Grazie ancora. Saluti

Figurati, è il primo aiuto che do su questo forum e mi fa piacere che ti sia servito.
Come ti dicevo concentrati sulle due funzioni che ti ho scritto sopra, di tutto il programma sono loro che gestiscono le luci. Poi è chiare che ti serviranno anche le variabili e le librerie necessarie.
Comunque Riccardo è una persona molto gentile e disponibile e vedrai che ti darà una mano.