Ciao ragazzi... permetto che sono abbastanza nuovo in materia...
sto riscontrando alcuni problemi per la condivisione di un array di tipo intero tra due arduino, utilizzando una porta software serial su entrambe le schede.
se invio un singolo dato alla volta il problema non sussiste ma quando provo a inviare un intero array di tipo intero e a salvarlo in un array analogo... ecco qui casca l'asino(che poi sarei IO) .
Ho provato nell'arduino n°1 a inviare il valore con Seriale1.write (array)
e a leggerlo nell'arduino n°2 con Seriale2.read () ma niente.
Ho provato a inviare un valore alla volta dall'arduino n°1 con un ciclo for che si ripete sulla Seriale1.write(array[i]) e leggerlo un valore alla volta nell'arduino n°2 con un ciclo for che si attiva se Seriale2available e che legge
if (Seriale2.available()){
for (int i=0;i<n;i++)
ARRAY[i]= Seriale2.read();
}
ma in entrambe i modi non ho avuto il risultato sperato...
ho provato anche altre soluzioni ma la domanda mi sembra molto di uso comune quindi spero non sia necessario elencarli tutti.
Non sono riuscito a trovare una spiegazione chiara in merito... qualcuno saprebbe aiutarmi in maniera univoca ?
Vi ringrazio! Leonardo
La Serial.read() legge UN solo byte alla volta ... un intero è composto da DUE bytes, quindi, devi prima separarli, inviarli separatamente, riceverli singolarmente e poi rimetterli assieme in un intero.
Volendo "vincere facile", perdendo però il controllo della cosa e NON imparando nulla sulla trasmissione seriale (cosa di cui ti pentirai il giorno che devi inviare qualche cosa di più complesso), puoi usare le varie funzioni già pronte che trovi nella classe Serial come la parseint().
Già che ci sono aggiungo una domanda... ma se durante la comunicazione da Arduino n°1 a n°2
il ciclo non sta scorrendo sulla if (seriale2.available()) ma è impegnato in un'altra operazione... L'arduino n°2 perde la ricezione dei dati in ingresso ? Suppongo di si ma non ne sono certo...
Mi rispondo da solo!
Ho messo un delay molto alto nel ciclo di ricezione che sto usando come test eee...
ho scoperto che i dati inviati velocemente dal primo arduino vengono raccolti tutti dal secondo...
quindi la risposta alla mia domanda è NO
Ringrazio il pubblico... saluto casa e Buonanotte a tutti!
La ricezione da seriale è gestita ad interrupt ed i caratteri ricevuti vengono salvati in un buffer circolare ... non ricordo la profondità di tale buffer, ma sicuramente alcune decine di caratteri.