- 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
Scaricate qui lo skecth
ecco un video che vi mostra il funzionamento:
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