Pages: 1 [2]   Go Down
Author Topic: cosa viene trasmesso esattamente ?  (Read 1473 times)
0 Members and 1 Guest are viewing this topic.
Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 138
Posts: 9870
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

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()
{
 
}
Logged

Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset



 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  smiley-grin

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?
Logged


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

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 138
Posts: 9870
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mi sa che la mia domanda era posta "male"   smiley-twist

ho dato per "scontato"  che serial.write (x)  desse sempre lo stesso risultato  indipendentemente
se x=3     oppure   x=9999999
Logged


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

Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset



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:

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 ?,


Logged


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

Pages: 1 [2]   Go Up
Jump to: