configurazione softserial

salve a tutti
so benissimo che di questo argomento ne è stato parlato all'infinito, e a tal proposito non so quanti post ho letto nell'ultima settimana, ma non riesco a capire il problema del mancato funzionamento e di conseguenza chiedo aiuto a tutti voi.

devo far comunicare una variale ti tipo float fra due arduino uno, il collegamento hardware funziona perchè l'ho provato con questo sketch e sul monitor seriale del ricevitore riesco a leggere ciò che spedisce il trasmettitore.

void loop() {
  if (BTSerial.available() > 0) Serial.write(BTSerial.read());
  if (Serial.available() > 0) BTSerial.write(Serial.read());

il codice del trasmettitore, la parte semplificata solo per vedere se trasmette e riceve è la seguente:

//Codice per Arduino A in trasmissione
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

byte Decimali = 1;                                       // numero decimali
                             
float Ros = 13.0 ;        //dichiarazione della variabile 

void setup()   {
   Serial.begin(9600);  
   Serial.println("seriale tx inizio");
   mySerial.begin(9600);
   mySerial.println("seriale virtuale tx inizio");
    
}
void loop() {
 
   
     Serial.println(Ros, Decimali);
     mySerial.println(Ros, Decimali);
      
}

e quella del ricevitore è la seguente:

// Codice per Arduino B in ricezione
#include <SoftwareSerial.h> // libreria creazione porta seriale virtuale
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //Libreria per LCD i2c

LiquidCrystal_I2C lcd(0x3E, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // si assegna l'indirizzo del LCD

SoftwareSerial mySerial(9, 8); // RX, TX

int I = 0;  
int J = 0;  
String Z = "";
byte Decimali = 1;    

String SerRx = "";                           // azzera buffer ricezione
float Ros = 0.0 ;

void setup() {
   Serial.begin(9600);                      // inizializza porta seriale
   Serial.println("seriale rx inizio");
   mySerial.begin(9600);
   mySerial.println("seriale virtuale rx inizio");        // inizializza porta seriale ausiliaria
    lcd.begin(20, 4);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Ros:");

}

void loop() {

         SerRx = "";                        // azzera buffer ricezione
   
         while (mySerial.available() > 0) {    // ricezione da modulo
         SerRx += char(mySerial.read());      // aggiungi carattere al buffer                

 if (SerRx.length() > 0) {     // ci sono dei dati nel buffer (Temp<CR><LF>)
      J = 0;
      I = SerRx.indexOf(13, J);    // cerca CR (carriage return) a partire dal carattere J
         if (I > 0) {
      Z = SerRx.substring(J, I);         // sotto stringa dal carattere J al carattere I-1
         Ros = Z.toInt();
         J = I + 2;           // nuova posizione di ricerca
         mySerial.println(Ros, Decimali);
         Serial.print("Ros = ");
         Serial.println(Ros);
         lcd.setCursor(0, 1);
         lcd.print(Ros);
      }
     
      }
   }
  
}

, ma sul serial monitor del ricevitore non riesco a vedere niente.

non capisco dove sbaglio, ho provato anche a cambiare tipo di variabile , ma il risultato non cambia.

qualcuno è così gentile da aiutarmi

grazie

Grazie per le indicazioni, ho fatto alcune modifiche per provare, e cioè:
ho inserito un tempo di lettura del buffer

 SerRx = "";                        // azzera buffer ricezione
         Timer = millis();               // timer partito

         while (millis() - Timer < TimeOut) {      // attesa timeout
         while (mySerial.available() > 0) {        // ricezione da modulo
         SerRx += char(mySerial.read());           // aggiungi carattere al buffer                
         Timer = millis();                         // reset timer
         //Serial.println(SerRx); 
        }
        }   

 
    if (SerRx.length() > 0) {     // ci sono dei dati nel buffer (Temp<CR><LF>)
     int lu = (SerRx.length());
      Serial.println(lu);

in modo, secondo me, di poter caricare tutta la trasmissione
se vado a leggere la variabile SerRx da dentro il while timer
vedo dei dati passare in forma strana ma con un senso di quelli trasmessi.

quindi, ritengo che il buffer sia pieno
successivamente provo a vedere quanto è lungo SerRx per capire se è maggiore di 0,
ma a questo punto non restituisce nessun risultato, il buffer sembra vuoto.
com'è possibile se prima vedevo scorrere i dati ed avevo eliminato il suo svuotamento.
per quanto riguarda la variabile float l'ho sostituita con una di tipo int, intanto per eliminare il problema.
non ci levo le gambe ho fatto alcuni progetti tutti funzionanti, ma questo è di difficoltà superiore alle mie capacità.

grazie comunque

Per prima cosa ti ringrazio infinitamente per la tua disponibilità.

ho fatto delle prove, ma il risultato non è positivo, in quanto il valore visualizzato sul monitor seriale è 0.00 in pratica il valore assegnato alla variabile.
ho provato a leggere la variabile "valore" all'interno di lettura(), ma non da alcun risultato sembra vuota.

Le prove le voglio fare perchè mi interessa si il risultato, ma interessa di più capire come ci si arriva.
Dalle prove che ho fatto il risultato è il seguente:
la stringa che arriva è corretta #1350*

inserendo il serial print di "rx" subito dopo "valore" ottengo questo:
seriale rx inizio

inserendo il serial print di "valore" subito dopo "valore" ottengo questo:
seriale rx inizio
-13-143-1443-14443-13371-2651-e una serie di altri valori tutti differenti.

allora ho provato un'altro codice che è il seguente:

void loop() {

  
      rx = mySerial.read();
         
      if (rx == '#') {
       while (rx!= '*' ){
      rx =  mySerial.read(); 
      Serial.println(rx);
      
       valore = valore * 10 + rx - '0';
       Serial.println(valore);
         }
     
      }

sul monitor mi viene il seguente risultato di "rx"
1
3
5
0
*
1
3
5
0
*
che sarebbe corretto, ma che non so come convertirlo
utilizzando la tua funzione ottengo per "valore" il seguente risultato
1
13
135
1350
13494
3869
-26843
-6281
2726

un passettino in avanti mi sembra di averlo fatto, ma ancora non ho risolto
comunque prima di andare in pensione ci riuscirò.

ho provato, e così già molto meglio, il risultato è il seguente
seriale rx inizio

-13

-143
1
-1429
3
-14287
5
-11793
0
13142
trovato termine trasmissione

quindi legge correttamente la trasmissione, ma restituisce un valore strano.

ho visto che sei nato nel "lontano 1963" allora io dovrei parlare di preistoria.

FUNZIONA !!!!!!!!!!!

ho inserito queste righe
Ros = (valore * 1.0) /100;
Serial.println(Ros);

e il risultato restituito è corretto !!!!!!!!!!!!

Sei un grande ....

grazie mille per la disponibilità....