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 [u]SOLO in Inglese[/u] ... 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;
     }
  }
}