Comunicazione Seriale

Buongiorno

Ho la necessità connettere due arduino tramite seriale per poter scambiare dati.

In particolare ho la necessità di inviare una serie di valori ( Esadecimali ) da un’arduino A ad un Arduino B

A → B

Collegamenti : E’ sufficente invertire i pin della seriale : Atx → Brx ; Arx → Btx ; Agnd <-> Bgnd

Sorgente : Immaginiamo di dover inviare dall’arduino A una serie di codici esadecimali :

Byte buff[0x10,0x11,0x12];


Serial.write(buff, 3);

Dall’arduino B è possibile utilizzare il seguente codice per leggere i dati trasmessi ?

byte incomingByte;


if (Serial.available() > 0) {
incomingByte = Serial.read();

// CASO 1 utilizzo un if
if( incomingByte==0x10) -------> …

// CASO 2 utilizzo un swich
switch (incomingByte) {
case 0x10:
// ------> …
break;
case 0x11:
// ------> …
break;
case 0x12:
// ------> …
break;
default:
// ------> …
break;
}
}

In linea generale è corretto un codice simile ? CASO 1 e CASO 2 sono validi entrambi ?
Il fatto è che che se utilizzo la seriale per trasferire dati non ho la possibilità di fare debug !!!
Comuqnue stasera farò dei test reali ma se nel frattempo ho delle dritte è sicuramente tempo guadagnato !!!

Grazie
Drake

guarda che con softserial puoi simulare la seriale su altri 2 pin, così hai la seiale col pc per debuggare e quella per comunicare.
non credo che il codice sia giusto, perchè un codice esadecimale è più grande di un byte

lesto:
guarda che con softserial puoi simulare la seriale su altri 2 pin, così hai la seiale col pc per debuggare e quella per comunicare.
non credo che il codice sia giusto, perchè un codice esadecimale è più grande di un byte

Non conosco softserial !!! Dove la scarico ? :slight_smile:

Come fai a dire che i codici esadecimali che ho fatto vedere nell'esempio sono più grandi di un Byte?!!!!

Il codice esadecimale 0x10 = 00010000= 1 Byte !!!!!
Il codice esadecimale 0x11 = 00010001= 1 Byte !!!!!
Il codice esadecimale 0x12 = 00010010= 1 Byte !!!!!
...
Il codice esadecimale 0xFF = 11111111 = 1 Byte !!!!!

Saluti
Drake

si, quelli che hai scritto sono ok.
occhio a non superare 0xFF
la softserial mi pare sià già dentro arduinoIDE, altrimenti basta che usi il cerca e la trovi subito :slight_smile:

ciao
la libreria si chiama newSoftSerial
come hai fatto per leggere alla fine?
come fai a tradurre da numero a esadecimale (0x10) ?
grazie

stefanosky:
ciao
la libreria si chiama newSoftSerial
come hai fatto per leggere alla fine?
come fai a tradurre da numero a esadecimale (0x10) ?
grazie

la conversione dovrebbe avvenire in automatico infatti quel "0x" che metti davanti al valore è proprio per indicarlo come tale.
in programmazione che io scriva un valore come 10001 in binario o 9 in decimale è uguale, ti dirò di più:
puoi anche passare un numero tramite un carattere, ad esempio il numero 90 in codice ASCII equivale a Z se vuoi la prova basta che tieni schiacciato il tasto ALT mentre sul tastierino numerico digiti il numero ascii :wink: poi su arduino lo richiami con chr() ma qui stiamo divagando