Fade LED senza bloccare il resto del programma?

Ciao a tutti, sono alle prime armi con arduino e sto pian piano imparando.
Sto cercando di fare alcuni sketch e mi sono imbattuto in un problema che non riesco a risolvere. In pratica ho collegato alla scheda 6 Led alle uscite in PWM e ho come obiettivo far accendere o spegnere in fade ogni led con tempi diversi e valori di luminosità diversi. Ho provato ad utilizzare lo sketch di esempio chiamato "fade", ma fa lavorare un solo led alla volta finchè non è trascorso il tempi di delay. Vorrei chiedervi come devo procedere per far funzionare tutti i led contemporaneamente?
Grazie.

La temporizzazione non puó essere fatta con delay()
Devi usare millis()
vedi https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay

In pratica non viene aspettato che il tempo sia trascorso (delay()) ma controllato ripetutamente se il tempo é arrivato per fare qualcosa (millis()).

Ciao Uwe

Ma la guida che mi hai postato non è per accendere e spegnere il Led senza fade? Io cercavo uno sketch che facesse il fade a diversi led. Ho trovato questo codice:

/*
 Fade
 
 This example shows how to fade an LED on pin 9
 using the analogWrite() function.
 
 This example based on the Arduino Example Fade sketch
 but modified to use timing instead of the delay() function
 
 */
int brightness = 0;    // how bright the LED is
int fadeAmount = 5;    // how many points to fade the LED by
unsigned long currentTime;
unsigned long loopTime;

void setup()  { 
  // declare pin 9 to be an output:
  pinMode(9, OUTPUT);
  currentTime = millis();
  loopTime = currentTime; 
} 

void loop()  { 
  currentTime = millis();
  if(currentTime >= (loopTime + 20)){  
    // set the brightness of pin 9:
    analogWrite(9, 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 ; 
    }     
    loopTime = currentTime;  // Updates loopTime
  }
  // Other processing can be done here
                           
}

Il problema è che non riesco ad adattarlo a diversi led con diversi valori di luminosità e durata. Come posso fare?

Devi ovviamente creare un diverso ciclo di controllo per ogni led, ognuno con una diversa variabile da confrontare di volta in volta con millis ... :wink:

Grazie per l'aiuto, alla fine ci sono riuscito :smiley: