Ciao,
mi stavo documentando se fosse possibile far comunicare 2 o più arduini con i seriali presenti sulla board (tx1/rx1 o tx2/rx2 o tx3/rx3) ma non ho trovato molte informazioni a riguardo.
Quello che intendo, per esempio, è se è possibile inviare da un arduino una sequenza di numeri e leggerla su un altro. Oppure inviare il risultato di una funzione da un arduino e leggerla sull'altro e in caso sia uguale che faccia un altra funzione.
Non so se mi sono spiegato bene, comunque sto cercando qualche guida o qualche consiglio prima di cimentarmi.
Se qualcuno sapesse darmi qualche dritta lo ringrazio in anticipo
Buona serata
Ciao SukkoPera,
grazie per la risposta velocissima.
Le basi penso che siano identiche per il Serial 0, cioè stessa velocità di lettura e scrittura, il "Serial3.begin" nel setup e cavi di comunicazione incrociati (in più ho trovato di mettere in comune il GND però non so se cambia qualcosa).
quello che non riesco a trovare da nessuna parte è come scrivere il codice. Ti provo a spiegare con un esempio: se nell'arduino 1 invio con "Serial3.write()" e tra le parentesi metto una parola di 5 lettere o un numero di 5 cifre intero, come faccio a dire all'arduino 2 con "Serial3.read()" che quello da leggere deve corrispondere a 5 lettere o a 5 cifre uguali all'altro? Dove devo dargli il parametro di lettura (inteso che sono 5 caratteri o 5 cifre intere)?
Il primo carattere trasmesso indica il tipo di dato (lettere o numeri), il secondo la quantità di byte trasmessi.
Esempio:
"L4TEMP" stringa di 4 caratteri contenuto "TEMP"
"F512.45" numero float di 5 digit contenuto 12.45
"I5-1234" numero int di 5 digit contenuto -1234
"B3123" numero byte di 3 digit contenuto 123
Grazie mille per l'aiuto
ma come faccio a costruire un protocollo di trasmissione/ricezione?(questo argomento non l'ho mai affrontato e non trovo guide o esempi)
Cioè non capisco se l'arduino è già settato per questi parametri oppure devo impostarli io
Grazie ancora
Arduino è già configurato a basso livello per far sì che le seriali si parlino correttamente (vabbeh, diciamo così). Ti resta solo da definire la velocità che vuoi usare, e questa deve essere uguale da ambo i lati. Dato che usi seriali hardware non dovresti avere problemi ad usare una velocità alta come ad esempio 115200, che è il numero che andrai a mettere nelle SerialX.begin() in entrambi gli sketch.
Fatto questo ti trovi una sorta di tubo bidirezionale dove quel che infili da un lato arriva dall'altro. Il problema è che nel tubo scorre un flusso continuo in cui di per sé non puoi distinguere l'inizio e la fine dei dati che trasmetti. Ad esempio, se invii 43 ricevi 43, ma ricevi 43 anche se invii prima un 4 e poi un 3 separato, mi spiego?
Tu devi quindi definire, a seconda delle tue necessità, un protocollo di alto livello che ti permetta di interpretare i dati che ricevi in modo che siano quelli che hai trasmesso, e cyber qua sopra ti dà una possibile strategia da seguire.
In sostanza è una convenzione, che stabilisci tu, e che permette ai due arduino di parlarsi e capire cosa si stanno dicendo. Quello che ti ha suggerito cyberhs è uno spunto su come costruire questa convenzione ma tu puoi decidere di farla come ti pare. In sostanza chi trasmette deve rispettare il formato che hai stabilito in modo che chi riceve sappia come interpretare e cosa fare con i dati. Sembra complicato ma in fin dei conti si tratta di scrivere qualche istruzione negli sketch per controllare cosa sta succedendo e comportarsi di conseguenza.