Comunicazione tra seriali tra Arduino mega

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

prismele

Certo, altrimenti a cosa servirebbero? :o

Ovviamente devi configurare le seriali con gli stessi parametri e collegare RX/TX incrociati.

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

Grazie ancora

Puoi costruire un protocollo di trasmissione.

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 [u]a basso livello[/u] per far sì che le seriali si parlino correttamente (vabbeh, diciamo così). Ti resta solo da definire la velocità che vuoi usare, e questa [u]deve essere uguale da ambo i lati[/u]. 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 [u]di alto livello[/u] 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.

Esistono anche soluzioni preconfezionate che magari ti possono tornare utili, come forse ad esempio: https://github.com/jeroendoggen/Arduino-serial-messaging

Non farti spaventare dalla parola "protocollo" ;D

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.

Ciao

Attilio