Esperimenti con logiche programmabili
Programmazione, Tutorial Arduino

Arduino aggiungere porta seriale con Software Serial Library

Utilizzare Software Serial Library per aggiungere una porta seriale

La comunicazione seriale RS232 è un modo semplice per permettere alla nostra board Arduino di comunicare con il computer piuttosto che con sensori o altri dispositivi.
Principalmente Arduino UNO possiede una sola porta seriale, implementata in hardware sul chip Atmega328, e disponibile sui pin0 (Rx) e pin1 (Tx) della scheda.
Sebbene, il più delle volte, una porta seriale sia sufficiente, può essere necessario instaurare un’ulteriore comunicazione seriale, ad esempio, per motivi di debugging o monitoring con un altro dispositivo o computer.
In questo caso ci viene in aiuto la libreria SoftwareSerial (Software Serial Library) che permette di impiegare ulteriori pin disponibili sulla scheda per definire una porta seriale aggiuntiva.

Per utilizzarla è fondamentale inserire nello sketch il riferimento alla libreria tramite la parola chiave #include:

#include <SoftwareSerial.h>

successivamente si definisce una variabile utilizzando il costruttore SoftwareSerial:

SoftwareSerial PortaSeriale = SoftwareSerial(pin_RX, pin_TX);

 

dove PortaSeriale è il nome dell’oggetto, pin_RX definisce il pin per ricevere i dati e pin_TX definisce il pin per la trasmissione dati.

Ora nella funzione Setup(), tramite pinMode, definiamo il pin previsto per la ricezione come input, e il pin previsto per la trasmissione come output. Specifichiamo inoltre la velocità di trasmissione a 9600bps.

void setup()
{
pinMode(pin_RX, INPUT);
pinMode(pin_TX, OUTPUT);

PortaSeriale.begin(9600);
}

 

Per leggere e scrivere sulla seriale vengono utilizzati gli stessi metodi implementati per Serial().

Di seguito l’esempio completo che permette di testare questa funzionalità impiegando i pin7 per la ricezione ed il pin8 per la trasmissione

#include <SoftwareSerial.h>

//creo una nuova porta seriale via software
SoftwareSerial PortaSeriale =  SoftwareSerial(7, 8);

//variabile
char EchoChar = 0;

void setup()  {
//definisco il pin7(RX) come ingresso
pinMode(7, INPUT);
//definisco il pin8(TX) come uscita
pinMode(8, OUTPUT);
//setto la velocita della seriale software
PortaSeriale.begin(9600);
}

void loop() {
//leggo dalla seriale(pin7)
EchoChar = PortaSeriale.read();
//invio il dato letto
PortaSeriale.print(EchoChar);

delay(10);

}

 

il circuito di per il test è rappresentato nell’illustrazione seguente:

Avendo altri pin disponibili nulla ci vieta di definire un’ulteriore porta seriale o più.

Nonostante l’utilità di questa libreria, ci sono alcune limitazioni che bisogna conoscere, per evitare errori di programmazione e di progettazione:

Queste limitazioni potrebbero far ripensare l’utilizzo della libreria, ma credo che sia comunque importante conoscerne il funzionamento per valutare, a seconda dei circuiti, se impiegarla o meno.
Personalmente l’ho trovata molto utile per inviare dati ad altri dispositivi come funzione di monitoring, difatti potete utilizzare solamente la funzione print e tralasciare la read().

Related posts

24LC256 utilizzare una memoria seriale su bus I2C

Marco Lai
10 anni ago

Pilotare striscia LED RGB

Marco Lai
11 anni ago

Arduino Day 2015 in Sardegna

Marco Lai
9 anni ago
Exit mobile version