La prima cosa da fare è includere la libreria nel nostro programma, indicare i PIN che vogliamo usare come RX ( comunicazione TTL in ingresso) e TX (comunicazione TTL in uscita).
#include <SoftwareSerial.h>
#define RX 6
#define TX 7
SoftwareSerial mySerial(RX, TX);
Con l'istruzione SoftwareSerial si definisce una interfaccia seriale dal nome mySerial indicando i PIN adibiti a RX ed a TX.
Nel caso si voglia usare anche il secondo canale di trasmissione disponibile nel MAX232 su può definire una seconda interfaccia usando un altro nome ed altri PIN:
SoftwareSerial secondSerial(3,4)
Abbiamo definito i PIN che trasmettono i dati, ma non abbiamo ancora definito di che tipo sono i dati da trasmettere, per tale motivo occorre dichiarare le variabili tx ed rx, che sono rispettivamente l'informazione spedita da Arduino e l'informazione ricevuto.
Tali variabili sono definite come byte, tale tipo memorizza 8 bit, permettendo di avere dei valori da 0 a 255.
byte tx = 0; // variabile per contenere il carattere inviato
byte rx = 0; // variabile per contenere il carattere ricevuto
Giunti a questo punto abbiamo definito sia l'interfaccia hardware che software di comunicazione, mancano ancora ancora settaggi fondamentali per la connessione come ad esempio la velocità di trasmissione dei dati.
Per eseguire dei test e dei debug uso due connessioni seriali, una dal PC ad Arduino ed una seconda da Arduino al PC (mySerial).
void setup()
{
Serial.begin(19200); // imposto la UART per lavorare a 19200
pinMode(led, OUTPUT); // imposto il pin sul quale è collegato il led come uscita
Serial.flush(); // svuoto il buffer di ricezione seriale
mySerial.begin(19200);
mySerial.flush();
Serial.println("Avvio della comunicazione");
}
Riorganizzando quanto detto in un unico programma abbiamo quanto segue:
/*
*/
#include <SoftwareSerial.h>
#define RX 6
#define TX 7
SoftwareSerial mySerial(RX, TX);
#define led 13 // led connesso al pin n°13
byte tx = 0;
byte rx = 0; // variabile per contenere il carattere ricevuto
void setup()
{
Serial.begin(19200); // imposto la UART per lavorare a 19200
pinMode(led, OUTPUT); // imposto il pin sul quale è collegato il led come uscita
Serial.flush(); // svuoto il buffer di ricezione seriale
mySerial.begin(19200);
mySerial.flush();
Serial.println("Avvio della comunicazione");
}
void loop()
{
int flag=0;
while (Serial.available() >0) // Controllo se il buffer di ricezione contiene qualcosa
{
tx = Serial.read(); // leggo il carattere ricevuto e lo memorizzo in rx
mySerial.write(tx);
Serial.print("Arduino TX -> ");
Serial.write(tx);
Serial.println();
flag = 1; // per scrivere il carattere "CR" su mySerial
}
if (flag == 1){
mySerial.println();
flag = 0;
}
if (digitalRead(RX)== 1)
{
Serial.println("-------");
}
else
{
Serial.print("RX <- ");
Serial.println(RX);
}
while (mySerial.available()>0)
{
rx = mySerial.read();
Serial.write(rx);
flag = 1;
}
if (flag == 1){
Serial.println();
flag = 0;
}
delay(1000);
}
Nel prossimo post vedremo come fare il debug e se finalemnte il cellulare risponde ai comandi
[...] - Arduino, Max232 e comunicazione seriale – Parte 2 [...]
RispondiElimina