Lectura de datos series lentos

Buenas,
Estoy comunicando dos Arduinos mediante puerto serie y un modulo RS448 de modo simplex.

En el Arduino Master envió datos de 0 a 250 mediante Serial.println().

En el Slave recibo mediante el siguiente código

#define DEBUG(a) Serial.println(a);
int Dato;

void setup()
{
 Serial.begin(19200); //19200
}

void loop()
{ 
       String str = Serial.readStringUntil('\n');
       int data = str.toInt();
        DEBUG(data);  //////lo utilizo para monitorear que información llega desde el serie ( es importante esta linea al comienzo: #define DEBUG(a) Serial.println(a);)
        Dato = data;
}

Necesito recibir el valor Dato en int.
Lo esta haciendo actualmente, pero noto la recepción muy lenta, al monitorizarlo veo que demora casi un segundo por recepción.

Como puedo mejorarlo?

A mi me pasó algo parecido y un compañero del foro me dijo que colocase

Serial.setTimeout(200);

despues del

Serial.begin(19200);

Porque por defecto setTimeout es 1000 segundos (1seg), prueba con diferentes valores, yo al final lo dejé en

Serial.setTimeout(5);

Me llama la atencion que lo llames RS448, será RS485 (simplex) o RS442 (duplex).

Serial.readStringUntil('\n');

Tiene ese inconveniente aunque @tresvdoble ya te indicó como resolverlo.
Prueba esto mejor

#define DEBUG(a) Serial.println(a);
String data = "";
void setup()
{
   Serial.begin(9600);
}
void loop()
{
   while (Serial.available())
   {
      char character = Serial.read();
      if (character != '\n')       {
         data.concat(character);
      }
      else       {
         Serial.println(data);
         data = "";
      }
   }
}

Una recomendación, huye de readstringuntil y llamadas de ese tipo. mejor usar, como te ha comentado Surbyte, read directamente y hacerte un bucle. Así podrás controlar mejor qué te llega y cómo te llega y podrás enviar bytes o enteros en vez de cadenas.
Saludos.

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