Energia 06 - Lettura dei pulsanti e uso del serial terminal

Valutazione attuale: 3 / 5

Introduzione

Nello scorso articolo abbiamo descritto la funzione analogWrite. Questa funzione  utilizza la tecnica per il controllo di potenza denominato PWM (Pulse Width Modulation) al fine di poter controllare una grandezza analogica come per esempio la luminosità di un LED.
In questo articolo descriveremo il funzionamento del comando digitalRead utilizzando un pulsante collegato a massa, in particolare si farà uso del comando INPUT_PULLUP.
Inoltre avremo la possibilità di utilizzare per la prima volta il comando Serial.print che permette di stampare a video del testo.

Materiale necessario

Per il nostro progetto abbiamo bisogno del seguente materiale:

  • Software Energia
  • Scheda di sviluppo LaunchPad MSP430  con MSP430G2553
  • 2 pulsanti
  • 1 LED rosso
  • 1 resistore 150ohm
  • cavetti per collegare il tutto

Cos'è un pulsante?

I pulsanti sono componenti molto semplici, infatti quando premiamo su uno di loro colleghiamo due contatti in modo che la corrente elettrica possa scorrere attraverso due punti, una volta rilasciato, una molla provvede a riportarlo allo stato iniziale.
I piccoli pulsanti che utilizzeremo in questa lezione sono composti da quattro collegamenti, ma come possiamo vedere in Figura 1 i pin sono collegati due a due in maniera tale da formare comunque due pin di riferimento.


Figura1: Pulsante a 4 pin.

Molto spesso questi dispositivi elettromeccanici vengono confusi con gli interruttori. Gli interruttori sono componenti elettromeccanici che possono essere definiti pulsanti a stato fisso.
Come possiamo vedere dalla Figura 2, gli interruttori hanno uno stato ON ed uno stato OFF.
Generalmente hanno un pin comune centrale (deviatore), nel nostro caso il Pin B, e ai due lati sono presenti due Pin (A e C). Un sistema è allo stato OFF fisso se è collegato al Pin A,  mentre si trova nello stato ON se l'interruttore è collegato al Pin C.

Figura2: Esempio di deviatore.

Dopo aver fatto maggiore chiarezza sulla differenza tra un pulsante ed un interruttore andiamo a vedere lo sketch che utilizzeremo.

Esempio Applicativo

Nel programma che andremo a scrivere faremo in modo che premendo il primo pulsante, il LED collegato alla nostra scheda si accenda, mentre nel caso in cui andremo a premere il secondo pulsante il LED tornerà nello stato di quiete, cioè spento. Vedendo con più attenzione lo sketch in Figura 3 è possibile notare due cose:

  • Il LED si accende se il pulsante si trova nello stato LOW
  • Utilizziamo la funzione Serial.println

Figura 3: Sketch per il controllo dei LED.

Andiamo ora a vedere nello specifico lo sketch. Nella prima parte dello sketch, si inizializzano le variabili che identificano i pin che vogliamo utilizzare, per poi utilizzarle all'interno della funzione setup.

int pulsante1 = 2;
int pulsante2 = 3;
int led = 4;

void setup() {
   Serial.begin(9600);
   pinMode(led, OUTPUT);
   pinMode(pulsante1, INPUT_PULLUP);
   pinMode(pulsante2, INPUT_PULLUP);
}

Il pin collegato al LED si dichiara come fatto nei precedenti progetti, mentre i due pulsanti sono stati dichiarati come “INPUT_PULLUP”. La modalità INPUT_PULLUP permette di settare gli ingressi di default nello stato HIGH (usando i resistori interni di pull-up presenti negli MSP430). È possibile utilizzare tale funzione perché, come vedremo nello schema elettrico, i pulsanti sono collegati verso massa.
In questo modo l'ingresso è settato di default come HIGH, mentre nel momento in cui premiamo il pulsante viene messo nello stato LOW.
Nella funzione di setup, inoltre, è presente una dichiarazione che non abbiamo visto fino ad ora, ovvero Serial.begin(9600).

Questo comando permette di aprire un canale seriale tra la nostra scheda ed il PC per vedere stampato sul monitor le informazioni che vogliamo. In particolare la scheda LaunchPad possiede una porta seriale virtuale, basata sulla classe USB CDC. Dal lato software del microcontrollore, essendo presente un brige (ponte)  UART – USB, non ci si deve preoccupare del protocollo USB ma gestire la comunicazione come una semplice porta seriale.
Nel nostro esempio ho settato la velocità a 9600 Baud per secondo (velocità più che sufficiente per il nostro esempio), velocità che può essere settata anche diversamente, ma personalmente non ho mai cambiato valore.

Nella seconda parte dello sketch si  è scritto quello che è in sostanza il nostro programma. Dato che abbiamo collegato i pulsanti a massa, andiamo ad eseguire ciclicamente dei controlli su questi due pulsanti e controllare se sono stati premuti. Nel caso in cui premiamo il  pulsante collegato al pin “pulsante1”, questo imposterà l'ingresso nello stato LOW andando ad eseguire il primo ciclo "if".

void loop() {

   if (digitalRead(pulsante1) == LOW) {
      Serial.println("Led Acceso");
      digitalWrite(led, HIGH);
   }

   if (digitalRead(pulsante2) == LOW) {
      Serial.println("Led Spento");
      digitalWrite(led, LOW);
   }
}

In particolare, ad ogni cambio di stato, come prima cosa la scheda trasmettere attraverso la porta seriale, la stringa "Led Acceso" e successivamente si imposta l'uscita collegata al LED allo stato HIGH, accendendo cosi il LED. Questo stato persiste finché non premiamo il pulsante collegato al pin "pulsante2", impostando cosi l'ingresso nello stato LOW spegnendo il LED e trasmettendo alla porta seriale lo stato "Led Spento".

Per realizzare il tutto andiamo quindi a cablare il circuito seguendo i collegamenti fatti in Figura 4.

Figura 4: Cablaggio del circuito di esempio.

A questo punto andando ad aprire la porta seriale  cliccando sul pulsante indicato in Figura 5 ed avviando il programma, ci accorgiamo di una cosa: la scritta compare più volte (per tutto il tempo in cui teniamo premuto il pulsante.
Questo perché per quando velocemente possiamo premere il pulsante, il microcontrollore impiega  meno tempo a compiere il ciclo di controllo trovando di nuovo premuto il pulsante...
A questo punto dovremo scrivere quello che in gergo si chiama "controllo antirimbalzo". Piuttosto che scriverlo io vi invito a scriverlo da soli e postare la risposta sul Forum.
Dato che utilizzeremo di nuovo il pulsante, nel successivo articolo, ingloberò nello Sketch quella che a mio parere è la soluzione più efficiente.

Detto questo divertiamoci ad inviare segnali morse con il nostro LaunchPad!

Figura 5: Pulsante per visualizzare la finestra del terminal di comunicazione seriale.

Nota

La configurazione dei Jumper che la scheda deve avere per effettuare la trasmissione seriale con il PC è visibile sulla serigrafia di Figura 6, ovvero per un HW UART, bisogna collegare le linee TXRD e RXD con in Jumper in orizzontale (durante la fase di programmazione bisogna averli in verticale come in Figura 6). Questa configurazione è valida per la versione 1.5 della scheda LaunchPad. Per la versione 1.4, le linee TX e RX devono essere collegate tra loro per mezzo di un collegamento ad X, per cui i Jumper non sono più sufficienti per effettuare il collegamento richiesto, ma sono necessari dei cavi. Questo inconveniente è una delle ragioni che ha portato ad avere la versione 1.5 della scheda LaunchPad.

Figura 6: Scheda LaunchPad vesione 1.5.


Autore : Andrea Valeriani


Bibliografia


You don`t have permission to comment here!

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login