- Arduino partiamo da zero - n°3
Ancora sui Pulsanti - Gestiamo più di un pulsante ....
Oggi vedremo come gestire più di un pulsante lo skecth presentato è la sintesi del codice utilizzato per la "gestione pulsanti" del Luxmetro.
In questo caso ho lasciato solo quanto indispensabile per la gestione dell'evento pressione di un pulsante.
Ognuno potrà quindi utilizzare questo codice per gestire "N" pulsanti con poche e semplici modifiche.
I pulsanti qui accendono o spengono dei led, potrete utilizzarli per gestire altri eventi applicando il vostro codice in aggiunta a questo.
Per provare questo codice occorre:
3 Led ( Rosso, Giallo, Verde ) ma vanno bene anche diversi.
3 (R4-R5-R6) Resistenze da 330 ohm.
3 ( R1-R2-R3)Resistenze da 10K.
3 Pulsanti.
Una BB, filo per collegamenti.
Realizzate il seguente schema:
Ecco qui lo skecth
* Sergio & Adriano Prenleloup
20/03/2013
Pulsanti v. 1.3
Questo sketch è una sintesi di quanto già
pubblicato nel post Luxmetro per la gestione
delle modalità di lavoro (old,min-max,lux/Fc).
In questo esempio si utilizzano tre bottoni che accendono con una pressione
il relativo led ( PulanteRosso/LedRosso), (PulsanteGiallo/LedGiallo),
(PulsanteVerde/LedVerde).
Per spengere il relativo led si preme una seconda volta.
Utilizzando questo sketch con opportune modifiche si possono gestire
un numero di pulsanti diversi, che possono a sua volta svolgere funzioni
diverse, nei vostri lavori.
La funzione antrimbalzo è impostata con "delay(15)" caso per caso
potrà essere regolata con tempi diversi.
*/
//pulsanti = pin
int Rosso_Button = 6;
int Giallo_Button = 7;
int Verde_Button = 8;
//stato corrente dei bottoni
int stato_bottoni[3];
boolean stato_switch[3];
// led = pin
int Led_Rosso = 0;
int Led_Giallo = 1;
int Led_Verde = 2;
void setup()
{
// Pulsanti
pinMode (Rosso_Button, INPUT);
pinMode (Giallo_Button, INPUT);
pinMode (Verde_Button, INPUT);
// Led
pinMode (Led_Rosso, OUTPUT);
pinMode (Led_Giallo, OUTPUT);
pinMode (Led_Verde, OUTPUT);
stato_bottoni[0] = 0;
stato_bottoni[1] = 0;
stato_bottoni[2] = 0;
digitalWrite (Led_Rosso, LOW);
digitalWrite (Led_Giallo, LOW);
digitalWrite (Led_Verde, LOW);
}
void aggiornaStato(int bottone, int& statoBottoneVecchio, boolean& statoSwitch)
{
//Si legge lo stato corrente del bottone (se premuto o no)
int statoBottoneCorrente = digitalRead (bottone);
//Se lo stato corrente del bottone è cambiato (diverso dal vecchio stato)
//si deve gestire il nuovo stato
if (statoBottoneCorrente != statoBottoneVecchio)
{
//se stiamo passando da rilasciato a premuto allora gestiamo la
//logica antirimbalzo e attiviamo/disattiviamo lo swith
if (statoBottoneCorrente == HIGH)
{
delay(15);
statoSwitch = !statoSwitch;
}
//il nuovo stato diventa lo stato corrente
statoBottoneVecchio = statoBottoneCorrente;
}
}
void controllaPulsante()
{
aggiornaStato(Rosso_Button, stato_bottoni[0], stato_switch[0]);
aggiornaStato(Giallo_Button, stato_bottoni[1], stato_switch[1]);
aggiornaStato(Verde_Button, stato_bottoni[2], stato_switch[2]);
}
void loop()
{
controllaPulsante();
//**** Gestione Led Rosso, con Pulsante Rosso
if (stato_switch[0] == 1)
{
digitalWrite(Led_Rosso, HIGH);
}
else
{
digitalWrite(Led_Rosso, LOW);
}
//**** Gestione Led Giallo, con Pulsante Giallo
if (stato_switch[1] == 1)
{
digitalWrite(Led_Giallo, HIGH);
}
else
{
digitalWrite(Led_Giallo, LOW);
}
//***** Gestione Led Verde con Pulsante Verde
if (stato_switch[2] == 1)
{
digitalWrite(Led_Verde, HIGH); // accende il led
}
else
{
digitalWrite(Led_Verde, LOW); //spegne il led
}
}
//end
youtube sergio
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