serial receive proyectos guardar fprintf desde datos controlar comunicacion como matlab interface serial-port arduino

receive - La interfaz serial de Matlab con Arduino es muy lenta



matlab serial communication (1)

Estoy tratando de establecer un enlace serial en Matlab con una placa Arduino. Leer los datos de la pizarra va bien. Sin embargo, escribir datos en la pizarra demora aproximadamente un segundo por cada bloque de información que envío.

El código que estoy ejecutando para escribir datos:

s = serial(comprt,''BaudRate'',9600,''DataBits'',8);
fopen(s);
fprintf(s, ''%c'', ''c'');
fprintf(s, ''%u %u %u %u /n'', [ABCD]);
pause(1);
fprintf(s, ''%c'', ''a'');
pause(1);

A, B, C, D son números de 8 bits en cualquier lugar entre 0 y 255, ''c'' y ''a'' son comandos de caracteres que hacen cosas en la placa Arduino y tocan el firmware en la placa.

Si no incluyo los comandos de pausa (1), cuando no impido que Matlab ejecute el siguiente comando durante al menos un segundo, la información de la serie no se procesa.

¿Alguien puede ayudarme a acelerar escribiendo cosas en el puerto serie? Comprobé con el editor Arduino, y cuando ingreso comandos equivalentes a través de su interfaz, todo está bien. Entonces, las demoras no están relacionadas con la placa Arduino ni con los controladores del dispositivo, definitivamente está del lado de Matlab.


He usado MATLAB bastante con Arduino. Ej .: vea aquí ( http://www.instructables.com/id/Arduino-to-MATLAB-GUI-Live-Data-Acquisition-Plotti/ ) [vea el enlace en instructable para mi código de GitHub Arduino y MATLAB] y aquí ( https://www.youtube.com/watch?v=wY3oh2GIfCI ).

Creo que tu problema está en tu lado Arduino.

Agregue esta línea a su función de configuración ():

Serial.setTimeout(100); //this will make the Arduino wait a max of only 100ms per incoming set of serial data, before moving on

Lea aquí: http://arduino.cc/en/Serial/SetTimeout

Luego, disminuya el tiempo de espera progresivamente hasta que obtenga malos resultados, para minimizar el tiempo de espera desperdiciado. Luego aumente un poco más para asegurarse de que esté lo suficientemente alto.

Este es un método rápido y sucio. Básicamente, su Arduino está configurado para esperar 1 segundo por defecto antes de continuar, una vez que se leen los datos entrantes.

Un mejor método es usar un carácter de terminación. Ejemplo: haga que MATLAB envíe un carácter de Nueva línea de terminación y use la función Arduino Serial.readBytesUntil para leer hasta el carácter de terminación. Entonces, nunca se alcanzará el tiempo de espera de entrada en serie, y puede configurar el tiempo de espera para que sea largo de nuevo (Ej: 1 seg), sin tener que esperar realmente a que se retrase.

¿Esto resuelve tu problema? De ser así, utilice la casilla de verificación junto a los botones de votación para marcar esta como la respuesta correcta. Gracias.