Ciao,
scusate la domanda, spero non sia banale
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…
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