(RISOLTO) invio intero tramite seriale

Ciao,
scusate la domanda, spero non sia banale :slight_smile:
se tramite seriale con istruzione Serial.Write invio una variabile int, la seriale mi trasmette comunque 2 byte anche se il valore è zero?
Perchè in ricezione non ritrovo i byte che invio...
Grazie

Scusate, ho detto una castroneria…
mi ero dimenticato che per inviare un intero, devo inviare 2 byte… :smiley:

Se leggi il reference ti dice che con Serial.write() puoi trasmettere un singolo byte o una stringa.

Un byte è un intero che va da 0 a 255, quindi se trasmetto un numero intero compreso tra zero e 255, mi invia un byte contenente questo valore.
Se dovessi trasmettere un numero intero superiore a 255, la cosa più comune è trasmetterlo sotto forma di stringa di numero di byte pari al numero di cifre, ricevere leggere tutta la stringa e convertirla in numero intero con la funzione atoi().

Quindi posso inviare il numero zero inviando un byte, ma non posso inviare un numero intero superiore a 255 se non come stringa o array di byte.

Si, ho optato per un'altra soluzione, ma il senso è quello; io volevo inviare una variabile int, pensavo che l'istruzione Serial.write() inviasse da sola i 2 byte, invece invia il byte meno significativo, perciò ho fatto così:

Serial1.write(int);
Serial1.write(int >> 8);

poi nella parte dove si riceve, ho ricomposto i byte così:

int = lettura[1] * 256 + lettura[0];

dove "lettura" è un array di byte.

Grazie

Un altro modo "classico" è passare attraverso una union:

union {
  uint8_t data[2];
  int16_t val;
} u;
u.val = 12345;
Serial.write(u.data, 2);

Claudio_FF:
Un altro modo "classico" è passare attraverso una union:

union {

uint8_t data[2];
  int16_t val;
} u;





u.val = 12345;
Serial.write(u.data, 2);

Grazie