Go Down

Topic: Trasmissione tra 2 schede Arduino (Read 904 times) previous topic - next topic

Piero78

Jan 25, 2013, 11:34 pm Last Edit: Jan 25, 2013, 11:37 pm by Piero78 Reason: 1
Ciao, sto cercando di effettuare una comunicazione tra 2 schede Arduino, nello specifico tra una Arduino UNO e una Romeo della DFRobot (basata su Arduino UNO).

La situazione è questa:
- La Arduino UNO è collegata ad una basetta dove sono presenti dei led da accendere per confermare l'avvenuta comunicazione.
Su di essa gira questo sketch:
Code: [Select]
const unsigned int ledPin = 13; // Settaggio del PIN a cui è connesso il led verde
const unsigned int ledPin2 = 12; // Settaggio del PIN a cui è connesso il led rosso
const unsigned int ledPin3 = 11; // Settaggio del PIN a cui è connesso il led giallo

void setup()
{
 pinMode(ledPin, OUTPUT); // Settaggio del programma per lavorare in OUTPUT sul PIN 13
 pinMode(ledPin2, OUTPUT); // Settaggio del programma per lavorare in OUTPUT sul PIN 12
 pinMode(ledPin3, OUTPUT); // Settaggio del programma per lavorare in OUTPUT sul PIN 11
 Serial.begin(9600); // Avvio la comunicazione seriale
}

void loop()
{
 if (Serial.available()) // Se ci sono dati in lettura
 {
   int car = Serial.read(); // Leggo il dato
   switch (car)
   {
     case '1':
          digitalWrite(ledPin, HIGH); // Accendo il LED verde
          break;
     case '2':
          digitalWrite(ledPin, LOW); // Spengo il LED verde
          break;
     case '3':
          digitalWrite(ledPin2, HIGH); // Accendo il LED rosso
          break;
     case '4':
          digitalWrite(ledPin2, LOW); // Spengo il LED rosso
          break;
     case '5':
          digitalWrite(ledPin3, HIGH); // Accendo il LED giallo
          break;
     case '6':
          digitalWrite(ledPin3, LOW); // Spengo il LED giallo
          break;
   }
 }
}


- La Romeo è connessa alla Arduino UNO sfruttando la classe SoftSerial.h, attende comandi dal PC tramite la porta seriale hw e dovrebbe inviarli alla Arduino UNO.
Lo sketch che gira su di essa è il seguente:
Code: [Select]
#include <SoftwareSerial.h>

SoftwareSerial SerialeUNO(12, 13); // RX, TX 12(romeo)->1(UNO) 13(romeo)->0(UNO)

void setup()
{
 Serial.begin(9600); // Seriale a cui è connesso il modulo bluetooth
 SerialeUNO.begin(9600); // Seriale connessa all'Arduino UNO
}

void loop()
{
 if (Serial.available()) // Se ci sono dati in lettura
 {
   int car = Serial.read(); // Leggo il dato
   switch (car)
   {
     case '1':
          SerialeUNO.print(1);
          SerialeUNO.println();
          //digitalWrite(ledPin, HIGH); // Accendo il LED verde
          break;
     case '2':
          SerialeUNO.print("2");
          SerialeUNO.println();
          //digitalWrite(ledPin, LOW); // Spengo il LED verde
          break;
     case '3':
          SerialeUNO.print("3");
          SerialeUNO.println();
          //digitalWrite(ledPin2, HIGH); // Accendo il LED rosso
          break;
     case '4':
          SerialeUNO.print("4");
          SerialeUNO.println();
          //digitalWrite(ledPin2, LOW); // Spengo il LED rosso
          break;
     case '5':
          SerialeUNO.print("5");
          SerialeUNO.println();
          //digitalWrite(ledPin3, HIGH); // Accendo il LED giallo
          break;
     case '6':
          SerialeUNO.print("6");
          SerialeUNO.println();
          //digitalWrite(ledPin3, LOW); // Spengo il LED giallo
          break;
   }
 }
}


Quando invio il comando dal PC verso la Romeo, il comando viene ricevuto, ma la comunicazione con la Arduino UNO non avviene.
Qualche suggerimento?
Grazie!

uwefed

hai collegato TX con RX e viceversa e la massa dei 2 Arduini?
Ciao Uwe

Piero78

Azz... ho collegato TX con RX e viceversa, ma non la massa...   :smiley-red:

Una domanda, posso creare una porta seriale sw anche sulla Arduino UNO ed usare quella invece di quella hw (pin 0 e 1)?
In pratica lavorerei su 2 porte sw, una su ogni scheda.

leo72


Azz... ho collegato TX con RX e viceversa, ma non la massa...   :smiley-red:

Una domanda, posso creare una porta seriale sw anche sulla Arduino UNO ed usare quella invece di quella hw (pin 0 e 1)?
In pratica lavorerei su 2 porte sw, una su ogni scheda.

Certo che puoi, usando la SoftwareSerial:
http://arduino.cc/en/Reference/SoftwareSerial

uwefed


Azz... ho collegato TX con RX e viceversa, ma non la massa...   :smiley-red:

centrato e affondato.
Buon lavoro ciao Uwe

Piero78


BrainBooster

aggiugi la dicitura "risolto" nel titolo

lollo1100

Ciao, ma nel tuo esperimento da quanto ho capito hai collegato fisicamente i piedini delle due schede? Giusto?

Go Up