Regolare luminosità led con due pulsanti

Salve sono nuovo nel forum e ho acquistato da poco Arduino Uno Rev 3 con il libro Arduino Progetti e soluzioni di Michael Margolis. Ho iniziato a scrivere qualche piccolo sketch utilizzando un led. Dopo aver fatto lampeggiare il led, accenderlo e spegnerlo con un pulsante e altri semplici esempi ho pensato di regolare la luminosità del led utilizzando due pulsanti, lo sketch è abbastanza semplice:

//controllo luminosità con due pulsanti

const int led = 9;   
const int push_1 = 8;
const int push_2 = 7;
int state_1 = 0;
int state_2 = 0;
int brightness = 0;

void setup()
{
  pinMode(led, OUTPUT);  
  pinMode(push_1, INPUT);
  pinMode(push_2, INPUT);
}

void loop()
{
  state_1 = digitalRead(push_1);  
  state_2 = digitalRead(push_2); 
  
  if (state_1 == HIGH)
  { 
    brightness = brightness + 2;
    delay(30);
  }
  
  if (brightness > 255)
  {
    brightness = 255;
  }
  

  if (state_2 == HIGH)
  {
    brightness = brightness - 2;
    delay(30);
  }
  
  if (brightness < 1)
  {
    brightness = 0;
  }
  
  analogWrite(led, brightness);
  
}

Quindi ho utilizzato il pin 9 con la modulazione a larghezza d'impulso (PWM) per regolare la luminosità del led. Lo sketch funziona perfettamente, ma il mio dubbio riguarda le ultime linee di codice, perchè se scrivo:

 if (brightness == 0)
  {
    brightness = 0;
  }

Quando vado a diminuire la luminosità del led quando quest'ultimo arriva ad avere luminosità nulla automaticamente continuando a premere il pulsante si riporta un istante dopo alla luminosità massima?

Ti invitiamo a presentarti qui: Re: Presentazioni nuovi iscritti, fatevi conoscere da tutti! (Part 1) - Generale - Arduino Forum
e a leggere il regolamento: http://forum.arduino.cc/index.php?topic=149082.0

ciao
Non ho ben capito il problema...
comunque con questo codice

if (brightness == 0)
  {
    brightness = 0;
  }

questa condizione NON si avvererà mai.
Parti da brigthness a 255, togli o aumenti di 2 .... brigthness varrà solo numeri dispari... e mai zero.

ciao
pippo72

Ma a parte questo... dov'è la logica?? :astonished:
Scusa ireon, vuoi confrontare brightness con 0 e, se è uguale a 0, porlo a 0.... PERCHE'? :sweat_smile: :sweat_smile:

Ireon, dopo un pò ti ripresenti e posti un altro problema. E questo? Hai poi risolto? ]:slight_smile:

Scusa ireon, vuoi confrontare brightness con 0 e, se è uguale a 0, porlo a 0.... PERCHE'? smiley-sweat smiley-sweat

Si era questo il problema. Scusate se non ho più risposto, ma me ne sono accorto subito rileggendo il codice :slight_smile:

Hai messo delle resistenze pulldown esterne?
Ciao Uwe

Si

Ciao,
consiglio vivamente di spostare i 2 delay in un singolo delay dopo

analogWrite(led, brightness)

oppure dopo i singoli

 state_1 = digitalRead(push_1);  
  state_2 = digitalRead(push_2);

il delay nella posizione da te descritta non ha senso

Consiglio inoltre di aggiungere il debounce sui bottoni in modo tale da non leggere troppe volte il rumore dei bottoni,
guarda pure sotto Esempi dell'IDE di Arduino.

Sostituisci:

 if (brightness < 1)
 if (brightness <= 0)