Comunicazione software serial di un array int

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().

Guglielmo

1 Like

Alla fine l'asino sono io... :grinning_face_with_smiling_eyes:
ho utilizzato un vettore byte e ora nessun problema :+1:

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 :rofl:
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. :wink:

Guglielmo

Guardando nel "core", nella parte che gestisce le seriali, si trova:

#if !defined(SERIAL_RX_BUFFER_SIZE)
#if ((RAMEND - RAMSTART) < 1023)
#define SERIAL_RX_BUFFER_SIZE 16
#else
#define SERIAL_RX_BUFFER_SIZE 64
#endif

quindi, a seconda della memoria che trova libera in partenza definisce un buffer circolare che può essere di 16 o 64 bytes :slight_smile:

Guglielmo

1 Like