sw e led

salve ragazzi sto realizzando un piccolissimo firmware di prova, ma qualcosa non mi quadra. vorrei che quando premo uno switch(sw) una volta , il del si accenda e rimanga quale fino a che non ri-premo il tasto, pare una cosa facilissima ma non lo riesco a fare. vi posto lo sketch

int sw=44;
int led=40;
 void setup()
 {
   pinMode(sw,INPUT);
   pinMode(led,OUTPUT);
   
 }

 void loop()
 {
 int stato=LOW;
 int val=LOW;
 val=digitalRead(sw);
 if(val==HIGH&&stato==LOW)
 {stato=HIGH;
 digitalWrite(led,HIGH);}
 if(val==HIGH&&stato==HIGH)
 {stato=LOW;
 digitalWrite(led,LOW);}


 }

con questo programma: il led rimane accesso sempre, quando premo il tasto si spegne, se lo rilascio, il led si riaccende. mi aiutate? grazie!

Sí é giusto. lo sketch fa quello che deve fare (col aiuto del Bouncing del pulsante). Per fare quello che vuoi TU togli il int stato=LOW; dal loop() e mettilo prima del setup() fai la stessa cosa anche con int val=LOW; e poi fai il debonce dal pulsante. Ciao Uwe

Esiste una cosa che si chiama barra spaziatrice: usala! :P :P

grazie a tutti per le risposte. ho effettuato queste modifiche ( varibili di stato, val prima del setup e antirimbalso), ma non funziona. cosa c'è che non va??? vi allego il codice!

int sw=44;
int led=40;
 int stato=LOW;
 int val=LOW;
 void setup()
 {
   pinMode(sw,INPUT);
   pinMode(led,OUTPUT);
   
 }

 void loop()
 {

 val=digitalRead(sw);
 if(val==HIGH)
 {delay(10);
 if(val==HIGH && stato==LOW)
 {stato=HIGH;
 digitalWrite(led,HIGH);}
 if(val==HIGH && stato==HIGH)
 {stato=LOW;
 digitalWrite(led,LOW);}
 }

 }

http://en.wikipedia.org/wiki/Debounce#Contact_bounce e http://www.arduino.cc/playground/code/bounce

I contatti del pulsante quando chiude o apre saltella qualche volta prima che fa contatto. Questo saltellare vede un circuito elettronico come 4-5 aperture/chiusure del tasto e percui certi sketch non funzionano come speri.

Ciao Uwe

Probabilmente la cosa dipende dalla mancanza di un resistore di pull-up, ma anche il software è un po' macchinoso. prova così:

...
 boolean stato = LOW;
 boolean val = HIGH;                    // pulsante che chiude verso massa
...
   pinMode(sw, INPUT_PULLUP);   // inserisce resistore di pull-up interno da 20k con pulsante che chiude verso massa
...
  val=digitalRead(sw);

  if(val == LOW) {                      // pulsante premuto
    stato = !stato                       // inverti stato
    digitalWrite(led, stato);
    delay(100);                          // ritardo per evitare lampeggi tipo "roulette"
  }
...

Ettore Massimo Albani