- 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
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 = 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
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
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) {
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;
//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
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
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))
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!!
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