Go Down

Topic: cosa viene trasmesso esattamente ? (Read 1 time) previous topic - next topic

astrobeed


Allora l'unico modo è passargli il numero scomposto in un array di unsigned char (byte) che poi il metodo write spedisce 1 ad 1 con la sintassi Serial.write(buf, len).


Si, il numero lo scomponi facilmente, e rapidamente, tramite una union e invii direttamente l'array definito in questa.

Esempio di codice, viene inviato sia il valore in formato ASCII, seguito da un 0x0D e 0x0A per via dell'uso di println, e i quattro byte che lo compongono (è un long int), lsb è il primo ( = S_LOINT.byte_s[0] )

Code: [Select]


union SCOMP_LOINT // union per scomporre un long int in byte
{
long int MyLong;
unsigned char byte_s[4];
} S_LOINT;

// S_LOINT.byte_s[n] // array equivalente al long int
// S_LOINT.MyLong    // variabile long int

void setup()
{
 Serial.begin(9600);
 S_LOINT.MyLong = 123456;
 Serial.println(S_LOINT.MyLong);
 Serial.write(S_LOINT.byte_s,4);
}

void loop()
{

}

gingardu






se gli passi una variabile numerica maggiore di un (unsigned) char viene trasmesso un singolo byte ottenuto tramite il casting, cioè solo i primi otto bit, di questa.
Provare per credere  :D


long x;

x =  92345;


Serial.write (x)

allora in questo cAso   il dato non puo essere trasmesso cosi direttamente con un  byte   solo  non lo trasmetti   giusto?
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

astrobeed


allora in questo cAso   il dato non puo essere trasmesso cosi direttamente con un  byte   solo  non lo trasmetti   giusto?


Ma lo leggi quello che scrivo oppure no ?
Ti ho già spiegato tutto nei minimi dettagli, ti ho messo uno sketch di esempio per come fare a trasmettere i singoli byte di un long int, o altro tipo di variabile più grossa di un byte a tuo piacere, non ho tempo da perdere con chi non vuole leggere, o non vuole capire.

gingardu

mi sa che la mia domanda era posta "male"   ]:D

ho dato per "scontato"  che serial.write (x)  desse sempre lo stesso risultato  indipendentemente
se x=3     oppure   x=9999999
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

gingardu






Si, il numero lo scomponi facilmente, e rapidamente, tramite una union e invii direttamente l'array definito in questa.

Esempio di codice, viene inviato sia il valore in formato ASCII, seguito da un 0x0D e 0x0A per via dell'uso di println, e i quattro byte che lo compongono (è un long int), lsb è il primo ( = S_LOINT.byte_s[0] )

Code: [Select]


union SCOMP_LOINT // union per scomporre un long int in byte
{
long int MyLong;
unsigned char byte_s[4];
} S_LOINT;

// S_LOINT.byte_s[n] // array equivalente al long int
// S_LOINT.MyLong    // variabile long int

void setup()
{
 Serial.begin(9600);
 S_LOINT.MyLong = 123456;
 Serial.println(S_LOINT.MyLong);
 Serial.write(S_LOINT.byte_s,4);
}

void loop()
{

}



ma questo codice vale anche per la parte ricevente ?,


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Go Up