Arduino, led e pulsante

Danilo, un appassionato arduino come te, mi ha scritto in questi giorni per sottopormi il suo progetto ed ha trovato numerosi spunti nel blog per realizzarlo. Ad un tratto mi ha scritto: “… Vorrei aggiungerci appunto un interuttore,per i led ...”

Arduino un led ed un pulsante

Puoi leggere la nostra conversazione come commento all’articolo Tutotorial Arduino e i servo II in cui Danilo ha postato il suo sketch.

E’ probabilmente un problema in cui ti sei trovato anche tu, sembra il più banale dei casi di esempio eppure nasconde qualche insidia.

L’idea di Danilo è di accendere uno o più led con un pulsante e lasciarli accessi fino alla successiva pressione dello stesso pulsante.

Lo sketch che può aiutarti a farlo è più o meno il seguente:

/*
 * Sketch Led e bottone
 *
 * @author: Alfieri Mauro
 * @see:    https://www.mauroalfieri.it
 *
 * @licenze: Creative common
 */

int pinLed=13;
int bottone=2;
int statoLed=LOW;

void setup() {                
  pinMode(pinLed, OUTPUT);  
  pinMode(bottone, INPUT);
}

void loop() {
  int leggiBottone=digitalRead(bottone);

  if (leggiBottone == 1)
  {
     if (statoLed == LOW)
     {

       statoLed=HIGH;
       digitalWrite(pinLed, statoLed);
       delay(1000);

     } else {

       statoLed=LOW;
       digitalWrite(pinLed, statoLed);
       delay(1000);

     }
  }
}

Ecco come funziona:

inizia dalle linee 10-12: in cui definisci tre variabili, la prima pinLed indica a quale pin vuoi collegare il led nel mio caso ho utilizzato il led integrato nella board Arduino; la seconda bottone indica a quale pin colleghi il bottone o pulsante e l’ultima statoLed è la variabile più importante, quella in cui memorizzerai lo stato del led e che cambierà ad ogni pressione del pulsante (LOW spento, HIGH acceso);

linee 15-16: definisci la modalità di funzionamento dei pin pinLed e bottone il primo in OUTPUT perchè deve comandare il led, il secondo in INPUT perchè deve leggere il valore inviato dal pulsante;

linea 20: leggi il valore del pulsante con la funzione digitalRead() e memorizza questa informazione in una variabile definita integer: leggiBottone mi sembra parlante 🙂

linea 22: definisci un controllo sul valore della variabile leggiBottone, nel tipo di collegamento mostrato nella figura in alto il pulsante assume valore 0 a riposo e 1 quando premuto, se colleghi differentemente il pulsante dovrai cambiare questa condizione;

linea 24: verifica il valore della variabile di stato: statoLed, allo start questa variabile vale LOW come definito alla linea 12, per cui se sei a questo punto dello sketch vuol dire che hai premuto il pulsante ( leggiBottone == 1) ed il led è spento (statoLed == LOW);

linea 27: cambia lo stato del led da LOW, in cui sei in questo momento, a HIGH che ti permette di accendere il led;

linea 28: usa la funzione digitalWrite(pin,mode) dove pin è il valore del pin a cui è collegato il led e mode è lo statoLed, in questo momento impostato a HIGH;

linea 29: attendi un tempo di 1000 millisecondi = 1 secondo, più o meno è il tempo dei tuoi riflessi, è il tempo che impieghi a premere e rilasciare il pulsante senza dover fare toccata e fuga, premendolo e rilasciandolo come faresti con un comune interruttore, diciamo che rende più umano lo sketch;

linea 31: definisci la funzione di else, ossia quello che accade se alla pressione del pulsante verificata alla linea 22, lo stato del led non è LOW come si aspetta la linea 24; in pratica la condizione in cui ti trovi adesso, hai premuto e rilasciato il pulsante ed il led è acceso, l’else ti consente di poterlo spegnere con una nuova pressione del pulsante;

linee 33-35: sono come la sequenza 27-29 con la differenza che in questa condizione ti trovi solo se il led è acceso ed hai premuto nuovamente il pulsante, quindi vuoi spegnerlo per cui imposti statoLed a LOW;

Lo sketch è abbastanza semplice se ti è chiaro il concetto di stato, e quindi di variazione di stato utilizzato per comandare il led, se qualcosa non ti è chiara scrivimo commentando questo articolo.

Buon divertimento.

 

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/arduino-led-pulsante.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.