Puerto serie

Hola estoy intentando comunicar dos arduino y enviar varias variables int y float, he creado un bucle for pero parece que despues de enviar todas las variables cuando pasa un segundo envia un valor en blanco pero no se a que es devido, os dejo los dos codigos

Emisor:

#include <SoftwareSerial.h>
SoftwareSerial mySerial(6, 7);   // RX, TX

int i = 0;
int sal[6] = {1,2,3,4,5,6};
float Ment[6] = {100,200,300,400,500,600};

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
  Serial.println("Iniciando ... ");

  Serial.println("Listo");
}

void loop() {
  
  for (i=0; i<6; i++){
    mySerial.println(sal[i]);
    mySerial.println(Ment[i]);
    mySerial.flush();
  }
  delay(5000);
}

Receptor:

#include <SoftwareSerial.h>
SoftwareSerial mySerial(5, 7);   // RX, TX.

int str;
float val;


void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
  Serial.println("Iniciando");

  Serial.println("Listo");
}

void loop() {
  
  if(mySerial.available()){
    str = mySerial.parseInt();
    val = mySerial.parseFloat();
    mySerial.flush();
    Serial.print("Leyendo: ");
    Serial.print(str);
    Serial.print(" Variable: ");
    Serial.println(val);
  }
}

Esto es lo que recibo:

Leyendo: 1 Variable: 100.00
Leyendo: 2 Variable: 200.00
Leyendo: 3 Variable: 300.00
Leyendo: 4 Variable: 400.00
Leyendo: 5 Variable: 500.00
Leyendo: 6 Variable: 600.00
Leyendo: 0 Variable: 0.00
Leyendo: 1 Variable: 100.00
Leyendo: 2 Variable: 200.00
Leyendo: 3 Variable: 300.00
Leyendo: 4 Variable: 400.00
Leyendo: 5 Variable: 500.00
Leyendo: 6 Variable: 600.00
Leyendo: 0 Variable: 0.00

Leyendo: 0 Variable: 0.00 <-- esta linea es la que no entiendo

Seguramente estas recogiendo el ultimo caracter de nueva linea ya que usas println.Para hacer la prueba usa print ,aunque te saldra todo junto.

Ya lo he probado, si uso Serial.print y no Serial.println la orden Serial.parseInt(); no funciona correctamente.
La linea que yo digo tarda como un segundo despues de enviar la ultima, sospecho que es algo como fin de comunicacion o asi pero no se como evitarlo.

Haz la prueba enviando un solo elemento con println y luego con print.Solo es para saber si es el caracter nueva linea u otra cosa.

parece ser eso pero como lo evito? le he puesto al final un Serial.print(" "); para que la ultima linea no sea println pero igual

parseInt y parseFloat usan esos espacios que imprimes como separacion de las diferentes cifras.Puedes probar enviando un separador diferente.

for (i=0; i<6; i++){
    mySerial.print(',');
    mySerial.print(sal[i]);
    mySerial.print(',');
    mySerial.print(Ment[i]);
    mySerial.flush();
  }

Pero en la recepcion como lo hago porque no me funcionan el parseInt ni el parseFloat

Deberia funcionar.Prueba con otro delimitador como * o + ,puede ser que la , sea utilizada por parseFloat como separador entre la parte entera y la decimal

con esta orden mySerial.setTimeout(100); en el programa del receptor puedo variar el tiempo que tarda en salir esa linea, puede que el problema este en la lectura, no en el envio.

A ver en la prueba de enviar un solo valor con print sale o no sale esa linea?

sigue igual

Entonces probaste con esto y tampoco funciona?

for (i=0; i<6; i++){
    mySerial.print('*');
    mySerial.print(sal[i]);
    mySerial.print('*');
    mySerial.print(Ment[i]);
    mySerial.flush();
  }

yo creo que la solucion tiene que estar en la recepcion.

¿Pero funciona lo que puse o no????
El problema esta en el emisor ,no vas recibir nada que no se haya enviado...

continua igual, yo creo que cuando recibe la ultima linea vuleve a entrar una ultima vez en el bucle for y como no lee nada sale un 0.

continua igual, yo creo que cuando recibe la ultima linea vuleve a entrar una ultima vez en el bucle for y como no lee nada sale un 0.

Eso podria pasar si se lee alguna cifra incompleta porque no da tiempo a recibirla antes de que se lea, pero segun la captura que pusiste ,se reciben todas las cifras completas,entonces si el bucle se ejecuta 6 veces y los 6 pares de cifras se reciben completos,no se de donde sale esa linea.