venerdì 15 marzo 2013

un pulsante.

- Arduino partiamo da zero - n°2

 Post precedente - n° 1

Proviamo ad usare un pulsante.

Ora vediamo lo sketch

Con il circuito realizzato nel post precedente abbiamo a disposizione un pulsante ed un Led.

Nell'IDE troverete nella cartella esempi lo sketch "Button"


 /*
  Button

 Turns on and off a light emitting diode(LED) connected to digital 
 pin 13, when pressing a pushbutton attached to pin 2.


 The circuit:
 * LED attached from pin 13 to ground
 * pushbutton attached to pin 2 from +5V
 * 10K resistor attached to pin 2 from ground

Potete utilizzare il circuito realizzato cambiando nello sketch il pin 2 con il pin 6.



// constants won't change. They're used here to
// set pin numbers:
// cambiare la riga sottostante
const int buttonPin = 2;     // the number of the pushbutton pin
const int buttonPin = 6;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

Una volta fatta la modifica salvate lo sketch con altro nome.

Poi Verifica/compila ---  quindi Carica e vedrete il funzionamento...

Non è quello che volevamo quando premo il pulsante si accende il Led ( e rimane acceso ), alla seconda pressione il Led si spenge.

Lo sketch "Button" negli esempi di arduino fa una cosa diversa.

Bisognerà fare una modifica importante.




Cosa abbiamo di diverso?

Ci sono due variabili importanti

int buttonState = 0;         // current state of the button
int lastButtonState = 0;     // previous state of the button

poi verrà fatto un controllo

// read the pushbutton input pin:
  buttonState = digitalRead(buttonPin);

  // compare the buttonState to its previous state
  if (buttonState != lastButtonState) {

dove si domanda se lo stato attuale del bottone è diverso dallo stato precedente.


// save the current state as the last state,
  //for next time through the loop
  lastButtonState = buttonState;

quindi si salva lo stato attuale nella variabile lastButtonState, ed il ciclo si ripete ..

Nell'esempio c'è anche altro ma questo è quello che ci serve.

Allora fatti alcuni cambiamenti ecco una possibile soluzione anche se ce ne possono essere molte altre anche più corrette.



/*
Sergio Prenleloup
Dicembre 2012
Prova per utilizzo pulsante con arduino

Il Programma segue le indicazioni del Prof. Michele Maffucci
Lezione 03

Versione con un pulsante un led  V. 0.01
Revisione e spiegazioni aggiunte il 12/03/13

*/
int LED = 13;       // il nostro led è collegato al pin 13
int Button_1 = 6;  // il nostro pulsante è collegato al pin 6

// stato del pulsante

int StatoButton_1 = 0;       //stato del pulsante input lo leggiamo con la    digitalRead (Button_1)
//int buttonState = 0;         // current state of the button *** così era nell'esempio *******

int old_StatoButton_1 = 0;   //stato al passo precedente  del pulsante
//int lastButtonState = 0;     // previous state of the button **** così era nell'esempio *****

int OnOff = 0;               //condizione on off ci dice lo stato in cui si trova il LED
                                      // OnOff=0 spento,
                                      //   OnOff= 1 acceso.


void setup()
{
  pinMode(LED, OUTPUT);        // imposta il pin digitale come output
  pinMode (Button_1, INPUT);  // imposta il pin digitale come input

 }   



 void Pulsante ()
 {

  StatoButton_1 = digitalRead (Button_1);   // legge il valore restituito dal pin e lo memorizza in 

                                                                       // StatoButton_1

if ((StatoButton_1 == HIGH) && (old_StatoButton_1 == LOW))  
                                                                                        
  // controlla se lo stato attuale è cambiato
   {
     OnOff = 1 - OnOff;      // se il led è on (1) 1-1 OnOff viene posto a 0 ed il led si spenge
                                           // se il led è off (0) 1-0 OnOff viene posto a 1 ed il led si accende
                            
                            
     delay(20);                   // attesa antirimbalzo  ( leggi articolo Michele Maffucci)
   }
  
   old_StatoButton_1 = StatoButton_1;    // mettiamo in oldStatoButton_1 il valore attuale
 }   



void loop()
{

 
   Pulsante();
   
      if (OnOff == 1)            // si controlla lo stato led
      { 
    digitalWrite(LED, HIGH);   // Si accende il led  o comunque si lascia acceso
      }  
  else { 
    digitalWrite(LED, LOW);    //Si spegne il led   o comunque si lascia spento
       } 
    
}

I commenti inseriti nel listato spiegano bene quanto il programma sta facendo.
Se non vi è chiaro qualcosa chiedete!!

Scaricate qui sotto lo skecth Pulsante.ino

Pulsante.ino

Non è tutto sui pulsanti c'è altro da sperimentare.

Provate con lo stesso montaggio che avete fatto potrete sperimentare altri skecth interessanti.

 Potreste per esempio unire il primo programma Blink a quello appena fatto, in modo che alla pressione del pulsante il led cominci a lampeggiare, e alla seconda pressione del pulsante lampeggi più velocemente, e magari alla terza cessi di lampeggiare.

Potreste scrivere e postare nel commento le vostre prove utili anche per altri.

Un esempio interessante lo trovate in questo Blog nei post del Luxmetro.

Nello skecth del Luxmetro si usano i pulsanti, per bloccare la lettura ( funzione OLD), per effettuare e visualizzare la lettura minima massima, il terzo pulsante per passare da LUX a Foto candele.

La gestione dei pulsanti è stata realizzata da Adriano ed è esportabile ed applicabile in situazioni o progetti diversi inserendo le opportune variazioni.
 
Vi ringrazio per la lettura e vi invito al prossimo post. 
Se il post vi è stato utile, vi è piaciuto oppure no, scrivete un commento.
Attendo Vostri commenti.
Un saluto a tutti.
Sergio

Nessun commento:

Posta un commento

Vi ringrazio per la lettura e vi invito al prossimo post.
Se il post vi è stato utile, vi è piaciuto oppure no, scrivete un commento.

Un saluto a tutti.
Sergio

Copyright - Condizioni d’uso - Disclaimer
http://avventurarduino.blogspot.it/2012/10/inizia-lavventura-arduino-12-settembre.html