Modifica programma fade led

Ciao a tutti,
ho questo sketch che per quello che devo fare va benissimo, premo il pulsante e si accende a bianco la striscia rgb con un fade di 4 sec, ripigio il pulsante e si spegne sempre con un fade.
Ora dovrei fare una modifica…dovrei metterci altri 3 pulsanti che mi permettono di accendere o spegnere singolarmente i colori della striscia, sempre con fade… : :slight_smile: : :slight_smile: …praticamente 4 pulsanti…uno per ogni colore e uno per il bianco; è un pò che ci sto sbattendo la testa, ma non ci cavo un ragno dal buco…secondo voi è fattibile o ci può essere un’altra soluzione?
Grazie mille

#include <LEDFader.h>

LEDFader led = LEDFader(3);     //led R
LEDFader led1 = LEDFader(5);    //led G
LEDFader led2 = LEDFader(6);    //led B
#define puls 2                  //pulsante
int  val = 0;


void setup() {
  led.fade(0, 4000);
  led1.fade(0, 4000);
  led2.fade(0, 4000);
  pinMode(puls, INPUT);
  
}

void loop() {
  val = digitalRead(puls);
  led.update();
  led1.update();
  led2.update();
if (val == HIGH) {
  if (led.is_fading() == false) {

    // Fade da 255 - 0
    if (led.get_value() == 255) {
      led.fade(0, 4000);
      led1.fade(0, 4000);
      led2.fade(0, 4000);
    }
    // Fade da 0 - 255
    else {
      led.fade(255, 4000);
      led1.fade(255, 4000);
      led2.fade(255, 4000);
    }
  }
}
}

Buon pomeriggio,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione … possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO … Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

:slightly_frowning_face: :slightly_frowning_face: :slightly_frowning_face:

Non si capisce bene dove hai problemi. Gestisci già un pulsante, per altri 3 in più non dovresti avere difficoltà. Ma hai dei pulsanti che mantengono il loro stato (premuto/non premuto quindi interruttori) oppure dei pulsanti push ?

P.S. le costanti #define di solito si mettono in maiuscolo per riconoscerle, quindi PULS invece di puls Ti suggerisco anche di cambiare in tutto il programma i nomi a led, led1 e led2 in ledR, ledG e ledB così rendi il codice più chiaro.

Avevo già proposto una soluzione, poi forse è stata cancellata in attesa che ti presentassi.
Prova a modificarlo così:

#include <LEDFader.h>

LEDFader led = LEDFader(3);     //led R
LEDFader led1 = LEDFader(5);    //led G
LEDFader led2 = LEDFader(6);    //led B
#define puls 2                  //pulsante
#define pulsr 7
#define pulsg 8
#define pulsb 9

int  val = 0;
int  valr = 0;
int  valg = 0;
int  valb = 0;


void setup() {
  led.fade(0, 4000);
  led1.fade(0, 4000);
  led2.fade(0, 4000);
  pinMode(puls, INPUT);
  pinMode(pulsr, INPUT);
  pinMode(pulsg, INPUT);
  pinMode(pulsb, INPUT);
}

void loop() {
  if (led.is_fading() == false) {
    val = digitalRead(puls);
    valr = digitalRead(pulsr);
    valg = digitalRead(pulsg);
    valb = digitalRead(pulsb);
    
    led.update();
    led1.update();
    led2.update();
    
    if (val == HIGH) {
      // Fade da 255 - 0
      if (led.get_value()+led1.get_value()+led2.get_value() > 380) {
        led.fade(0, 4000);
        led1.fade(0, 4000);
        led2.fade(0, 4000);
      }
      // Fade da 0 - 255
      else {
        led.fade(255, 4000);
        led1.fade(255, 4000);
        led2.fade(255, 4000);
      }
    }
    if (valr == HIGH) {
      // Fade da 255 - 0
      if (led.get_value() == 255) {
        led.fade(0, 4000);
      }
      // Fade da 0 - 255
      else {
        led.fade(255, 4000);
      }
    }
    if (valg == HIGH) {
      // Fade da 255 - 0
      if (led1.get_value() == 255) {
        led1.fade(0, 4000);
      }
      // Fade da 0 - 255
      else {
        led1.fade(255, 4000);
      }
    }
    if (valb == HIGH) {
      // Fade da 255 - 0
      if (led2.get_value() == 255) {
        led2.fade(0, 4000);
      }
      // Fade da 0 - 255
      else {
        led2.fade(255, 4000);
      }
    }
  }
}

Con le modifiche precedentemente proposte diventa:

#include <LEDFader.h>

LEDFader ledR = LEDFader(3);    // led R
LEDFader ledG = LEDFader(5);    // led G
LEDFader ledB = LEDFader(6);    // led B
#define PULS 2                  // pulsante
#define PULSR 7
#define PULSG 8
#define PULSB 9

int  val = 0;
int  valr = 0;
int  valg = 0;
int  valb = 0;


void setup()
{
  ledR.fade(0, 4000);
  ledG.fade(0, 4000);
  ledB.fade(0, 4000);
  pinMode(PULS, INPUT);
  pinMode(PULSR, INPUT);
  pinMode(PULSG, INPUT);
  pinMode(PULSB, INPUT);
}

void loop()
{
  if (led.is_fading() == false)
  {
    val  = digitalRead(PULS);
    valr = digitalRead(PULSR);
    valg = digitalRead(PULSG);
    valb = digitalRead(PULSB);
   
    ledR.update();
    ledG.update();
    ledB.update();
   
    if (val == HIGH)
    {
      // Fade da 255 - 0
      if (led.get_value()+led1.get_value()+led2.get_value() > 380)
      {
        ledR.fade(0, 4000);
        ledG.fade(0, 4000);
        ledB.fade(0, 4000);
      }
      // Fade da 0 - 255
      else
      {
        ledR.fade(255, 4000);
        ledG.fade(255, 4000);
        ledB.fade(255, 4000);
      }
    }
    if (valr == HIGH)
    {
      // Fade da 255 - 0
      if (ledR.get_value() == 255)
      {ledR.fade(0, 4000);}
      // Fade da 0 - 255
      else
      {ledR.fade(255, 4000);}
    }
    if (valg == HIGH)
    {
      // Fade da 255 - 0
      if (ledG.get_value() == 255)
      {ledG.fade(0, 4000);}
      // Fade da 0 - 255
      else
      {ledG.fade(255, 4000);}
    }
    if (valb == HIGH)
    {
      // Fade da 255 - 0
      if (ledB.get_value() == 255)
      {ledB.fade(0, 4000);}
      // Fade da 0 - 255
      else
      {ledB.fade(255, 4000);}
    }
  }
}