comunicazione tra arduino uno ed ESP [RISOLTO]

Ciao
Devo fare comunicare un arduino UNO e un NodeMCU V3 attraverso la seriale ( 2 fili rx e tx).
Devo solamente inviare un dato INT compreso tra 700 e 4096. Il problema è che non riesco a sincronizzarli. Come fare per avvisare il RX che arriva un dato e quindi di prenderlo "buono" ? allego i due codici TX e RX esempio che sto usando.. si parlano, ma non benissimo a volte !

RX - RX - Pastebin
TX - TX - Pastebin

Grazie

Stai assumendo che quando invii con* s.print(data)* un valore random, dall'altra parte ti ritrovi lo stesso valore immediatamente mentre invece il numero viene inviato nell'equivalente stringa (c'è di mezzo print) un carattere per volta**.**

La funzione parseInt() prende il primo numero che somiglia ad un int, ma non è detto che la trasmissione sia completa.

Devi prevedere un terminatore di stringa, come il classico "new line" '\n' (e quindi sul TX basterebbe un println() al posto di print) oppure il "carriage return" '\r' o il carattere che preferisci.

ok quindi se metto "s.println(data);" dovrei risolvere ?

L'altro problema che ho riscontrato è che, se simulo un errore (premo reset sul TX arduino) all'accensione invia solamente degli "zero" 0...
Per farli riparlare devo resettarli entrambi, rx e tx..

dimare_gabriele:
ok quindi se metto "s.println(data);" dovrei risolvere ?

...e se gestisci il terminatore di stringa lato RX

e cioè ? come devo fare per capire che è terminato ?

Evitando di usare parseInt() che è bloccante ed anche la classe String che poi ci cazziano... una possibile soluzione.
Sembra un approccio più complesso rispetto al tuo primo sketch, ma è molto più "safe" .

Ho messo tutto nei commenti, ma se qualcosa non è chiaro chiedi pure.
https://pastebin.pl/view/0d7a5df9

P.S.
Nel tuo skecth originale c'era anche il seguente errore (che probabilmente è la ragione principale del non-funzionamento).

if (Serial.available() > 0){        c = s.parseInt();

Controlli se ci sono caratteri nel buffer della seriale hardware e poi leggi la software serial...

Sei un genio ! funziona benissimo !!
Anche simulando il reset del TX !!!

dimare_gabriele:
Sei un genio ! funziona benissimo !!

Ma figurati.... è solo C/C++ :wink:

Gabriele per mettere risolto devi modificare il tuo primo post

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.