Go Down

Topic: Comunicazione Seriale : Ricevere dati correttamente. (Read 1 time) previous topic - next topic

PaoloP

Per trasferire dati tra arduini puoi usare la libreria EasyTransfer --> https://github.com/madsci1016/Arduino-EasyTransfer che, come anticipato da MauroTec, incapsula tutti i dati in una classe e li trasferisce in blocco. (più o meno  :smiley-roll-blue:)
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

dr4gone

#6
Jul 23, 2012, 06:37 pm Last Edit: Jul 24, 2012, 01:15 pm by dr4gone Reason: 1
Ho risolto con un mio protocollino che sembra funzionare.... A saperlo prima.... Ora sono con il cell. Quando ho il PC a disposizione mostreró quello che ho fatto.
--------------------
Ecco come promesso...
Ovviamente questo è solo un esempio e una parte di un codice molto più lungo e con altre funzioni.. ma la base è questa.
TX
Code: [Select]

#include <SoftwareSerial.h>
#include "leOS.h"

SoftwareSerial mySerial(2, 3);
leOS temperature;

void setup()  
 {
 Serial.begin(1200);
 Serial.println("Inizializzo seriale");
 mySerial.begin(1200);
 temperature.begin(); /
 temperature.addTask(temp, 3000);

}

void loop()
{

       }


void temp() {
       val_t=val_t++;

        mySerial.print("t");  
        mySerial.print(val_t);
        mySerial.println(">");
}





RX
Code: [Select]

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3);
char temp[10];
int cont_t;
boolean inizio_t = false;
boolean fine_t = false;


void setup()  
{
 Serial.begin(1200);
 Serial.println("Ricevo");
 mySerial.begin(1200);
 mySerial.flush();

}

void loop()
{
 
  while(mySerial.available() > 0)
  {
    //char rx = mySerial.read();
    //Serial.println(rx);
    ottieni_dati();
   
    }
}

// -------------------- METODI -------------------

void ottieni_dati()
{
char rx = mySerial.read();
// --------------- TEMPERATURA -------------

         if(rx == 't')
{
    inizio_t = true;
    cont_t = 0;
    temp[cont_t] = '\0';
}
else if(rx == '>')
{
    fine_t = true;
}
else if(inizio_t == true)
{
    temp[cont_t] = rx;
    cont_t++;
    temp[cont_t] = '\0';
 
}
 

  if(inizio_t && fine_t)
  {
// Converto la stringa in intero
int tempInt = atoi(temp);

// Uso il valore
       Serial.print("Temperatura: ");
       Serial.println(tempInt);
 // Azzero tutto per la possima lettura
inizio_t = false;
fine_t = false;

cont_t = 0;
temp[cont_t] = '\0';
  }
 
}

gingardu

ma non c'è qualche "barbatrucco"  tipo mettere i pin ad alta impedenza quando hanno finito di trasmettere,  o mettere 2 pin  trasmittenti  differenti sui trasmettitori   e mettere 2 pin riceventi sul ricevitore (anche se funziona un pin  per volta  è ok)
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Go Up