Tutorial: accendere 3 led con 3 pulsanti

Usare Arduino per accendere i led è una delle cose che più mi diverte, saranno le lucine o il loro colore 🙂

3 led e 3 pulsanti

oggi voglio riprendere uno sketch presente tra gli esempi forniti con l’IDE di Arduino e ampliarlo un po’, lo sketch è Button.ino o Button.pde.

Ti mostro come ampliare il numero di led e di pulsanti associando ogni pulsante ad un led ed accendendo e spegnendo i led con la pressione del pulsante associato.

Per realizzare questo esperimento ti basta acquistare lo STARTER KIT CON ARDUINO UNO REV3, all’interno della confezione oltre all’arduino uno rev3 ci sono:

  • 5 led rossi di cui ne userai solo 3
  • 3 pulsanti da Circuito Stampato
  • la breadboard
  • i cavetti per le connessioni
  • 4 resistenze da 330Ω

Lo schema dei collegamenti è il seguente:

3 led e 3 pulsanti con arduinoper ogni pulsante devi collegare una resistenza da 330Ω tra il terminale a cui colleghi l’ingresso analogico di Arduino e il pin di massa ( Gnd ).

I 3 led avranno la massa in comune ( catodo ) e connessa alla massa del circuito e di arduino mediante una resistenza da 330Ω.

I terminali positivi dei 3 led sono collegati ciascuno ad un pin digitale di Arduino.

Ecco lo sketch:

#define analog0 A0
#define analog1 A1
#define analog2 A2

#define led0 2
#define led1 3
#define led2 4

int statoLed0 = 0;
int statoLed1 = 0;
int statoLed2 = 0;

void setup()
{
    pinMode( analog0, INPUT );
    pinMode( analog1, INPUT );
    pinMode( analog2, INPUT );

    pinMode( led0, OUTPUT );
    pinMode( led1, OUTPUT );
    pinMode( led2, OUTPUT );

    digitalWrite( led0, statoLed0 );
    digitalWrite( led1, statoLed1 );
    digitalWrite( led2, statoLed2 );
}

void loop()
{

  if ( analogRead(analog0) > 1000 )
  {
    if ( statoLed0 == LOW  ) statoLed0 = HIGH;
    else                     statoLed0 = LOW;
    digitalWrite( led0, statoLed0 );
    delay(200);
  }

  if ( analogRead(analog1) > 1000 )
  {
    if ( statoLed1 == LOW  ) statoLed1 = HIGH;
    else                     statoLed1 = LOW;
    digitalWrite( led1, statoLed1 );
    delay(200);
  }

  if ( analogRead(analog2) > 1000 )
  {
    if ( statoLed2 == LOW  ) statoLed2 = HIGH;
    else                     statoLed2 = LOW;
    digitalWrite( led2, statoLed2 );
    delay(200);
  }

}

Lo sketch è ridondante, nel senso che le righe di codice per gestire un led sono state duplicate per gestire anche gli altri due. Entrando nel dettaglio:

linee 01-03: definisci i tre pin analogici a cui colleghi i tre pulsanti;

linee 05-07: definisci i tre pin digitali a cui colleghi i led;

se ti stai chiedendo come mai non ho collegato anche i pulsanti a 3 pin digitali, visto che utilizzo il loro segnale come digitale, il motivo è semplice i pin analogici sono sempre meno considerati e lasciati inutilizzati nella maggior parte dei progetti, di fatto in questo modo riduci il numero di input possibili e di conseguenza anche di output disponibili. Con questi esperimenti la mia idea è di sensibilizzare anche sull’utilizzo di questi pin in modo che tu possa avere a disposizione più ingressi/uscite digitali;

linee 09-11: definisci tre variabili di tipo integer in cui memorizzerai il valore di stato ( acceso/spento -> HIGH/LOW) di ciascun led;

linea 31: testa il valore letto sull’ingresso analogico 0 ( A0 ) e se questo vale più di 1000 entra nella condizione if ed esegui le linee che seguono. Il suo funzionamento si basa sul fatto che un contatto normalmente aperto come quello del pulsante non premuto invia un segnale nullo ( zero ) all’ingresso analogico corrispondente. La pressione del pulsante collega al positivo il pin analogico, generando sul convertitore ADC di arduino il valore 1023. Riassumendo la pressione del pulsante viene vista da arduino con un valore letto sull’ingresso analogico di 1023, quindi maggiore di 1000;

linea 33-34: verifica che lo stato corrente del led 0 sia LOW, se verificato lo porta a HIGH, ossia inverte lo stato del led, in caso sia già HIGH lo porta a LOW ( linea 34 );

linea 35: invia il valore di stato appena impostato al pin digitale a cui è collegato il led;

linea 36: attende un tempo di 200 millisecondi prima di proseguire rilevando la pressione di un altro pulsante o dello stesso, questo serve ad evitare di dover premere il pulsante alla velocità di 1 millesimo di secondo, di contro se non ci fosse sarebbe molto difficile riuscire a fissare lo stato acceso o spento alla pressione del pulsante. Puoi aumentare questo tempo se il modo in cui intendi far lavorare i pulsanti è più lento, diminuirlo se più veloce;

linee 39-45: eseguono le stesse cose delle linee 31-37 ma per il secondo led;

linee 47-53: eseguono le stesse cose delle linee 31-37 ma per il terzoo led;

Ho realizzato anche un piccolo filmato dimostrativo:

Buon divertimento.

 

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

Permanent link to this article: https://www.mauroalfieri.it/elettronica/tutorial-accendere-3-led-con-3-pulsanti.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.