Go Down

Topic: sw e led (Read 560 times) previous topic - next topic

damosound

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
Code: [Select]

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!

uwefed

#1
Oct 06, 2012, 07:23 pm Last Edit: Oct 06, 2012, 07:26 pm by uwefed Reason: 1
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

tuxduino

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

damosound

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!
Code: [Select]
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);}
}

}

uwefed

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

cyberhs

#5
Oct 07, 2012, 02:29 am Last Edit: Oct 07, 2012, 02:53 am by cyberhs Reason: 1
Probabilmente la cosa dipende dalla mancanza di un resistore di pull-up, ma anche il software è un po' macchinoso. prova così:

Code: [Select]

...
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

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy