accensione e spegnimento graduale led(effetto alba tramonto)

salve, ho provato un codice per accensione e spegnimento led graduale comandato da un pulsante ma non va. Vorrei accendere gradualmente il led quando il pulsante è alto, e vorrei che arrivato alla max luminosità resti acceso fino a quando il pulsante non va basso. Qualcuno può aiutarmi?

accensione_led_graduale_tramite_pulsante.ino (1.01 KB)

ho modificato, ma ora non si spegne

giusto.ino (1.3 KB)

Prima di tutto, nella sezione in lingua Inglese si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione, poi, essendo questi il tuoi primi post, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione) e di leggere con attenzione il REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Il tuo post è stato spostato nell'opportuna sezione del forum "Italiano"

dorotea12:
ho modificato, ma ora non si spegne

Ma il tuo bottone è di quelli che mantiene la posizione o che schiacci ma poi quanto togli il dito ritornano alla posizione iniziale (push button) ?
Questo il tuo codice:

#define pinLed 5
#define pinBottone 2
byte statoLed,fadeValue=0;

void setup() 
{ pinMode(pinLed, OUTPUT);  
  pinMode(pinBottone, INPUT);
}
 
void loop() 
{ int leggiBottone=digitalRead(pinBottone);
  if (leggiBottone == HIGH)
  { if (statoLed == LOW)
    { for (fadeValue=0; fadeValue <= 255; fadeValue += 5) 
      {  analogWrite(pinLed, fadeValue);
         delay(50);
      }
      statoLed=HIGH;
    } 
  }
  else   // leggiBottone == LOW
  { if (statoLed == HIGH)
    { for ( fadeValue=255; fadeValue==0; fadeValue -=5) 
      { analogWrite(pinLed, fadeValue);
        delay(30);
      }
      statoLed=LOW;
    }
  }
}

La logica mi pare corretta. Ma mentre fa il fade di accensione 255/5=51 con delay(50) = 2,5 secondi
In quei 2,5 secondi di fade il delay blocca, quindi NON puoi spegnere

Il bottone è quello che mantiene la posizione. Comuque ho già risolto

dorotea12:
Il bottone è quello che mantiene la posizione. Comuque ho già risolto

Puoi condividere la soluzione ? Potrebbe essere utile anche ad altri.

ecco

ultimo.ino (1.34 KB)

Lo allego per facilitare lettura. Ho messo qualche byte invece di int

const byte pinLed=5;
const byte pinBottone=2;
byte statoLed=LOW;
 
void setup() 
{ pinMode(pinLed,     OUTPUT);  
  pinMode(pinBottone, INPUT);
}
 
void loop() 
{ byte leggiBottone=digitalRead(pinBottone);
  if (leggiBottone == HIGH)
  { if (statoLed == LOW)
    { for (byte fadeValue=0; fadeValue <= 255; fadeValue ++) 
      { analogWrite(pinLed, fadeValue);
        delay(20);
      }
      statoLed=HIGH;
    } 
  }
  else //leggiBottone == LOW
  {  if (statoLed == HIGH)
     { for ( byte fadeValue=255; fadeValue>=0; fadeValue--) 
       { analogWrite(pinLed, fadeValue);
         delay(5);
       }
       statoLed=LOW;
     }
  }
}