Matlab - Data Serial por Matlab

   
Vista:

Data Serial por Matlab

Publicado por Pedro (2 intervenciones) el 25/08/2014 19:51:56
Hola,

Tengo un programa que lee data serial en RS232 que llega por el puerto COM5. Una parte de la cadena que llega la almaceno en un vector y la voy graficando con respecto al tiempo.

Se que el programa no es la mejor forma de hacer el manejo de la data pero es la forma que encontre.

MI PREGUNTA ES:

mi cadena tiene mas datos que me gustaria tomar y plotear tambien...para ser especificos tengo tres angulos (roll, pitch, yaw) y tres aceleraciones (ejes x, y, z) pero por el momento solo estoy graficando la aceleracion en X.

Como puedo agregar mas graficos a mi programa? quiero poner los tres angulos en un grafico y las tres aceleraciones en otro grafico, pero conservando el movimiento "scroll".

dejo el codigo por aqui:

clear all
clc
close all

%newobject = instrfind;
%fclose(newobject);

%propiedades definidas por el usuario
% define puerto COM #
serialPort = 'COM5';
% titulo del pot
plotTitle = 'Aceleración en el eje X';
% eje-x etiqueta
xLabel = 'Tiempo (s)';
% eje-y etiqueta
yLabel = 'Data (g)';
% 'off' para apagar el grid
plotGrid = 'on';
% y-min
min = -1.5;
% y-max
max = 1.5;
% periodo de ploteo
scrollWidth = 10;
% asegurar tiempo de muestreo mayor que la resolucion
delay = .01;

%definimos variables de la funcion
tiempo = 0;
cuenta = 0;
%BA = 0;
%EA = 0;
%HA = 0;
XA = 0;
YA = 0;
%ZA = 0;

%configuracion del plot
plotGraph = plot(tiempo,XA,...
'r',...
'LineWidth',1,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[.49 1 .63],...
'MarkerSize',2);

title(plotTitle,'FontSize',25);
xlabel(xLabel,'FontSize',15);
ylabel(yLabel,'FontSize',15);
axis([0 10 min max]);
grid(plotGrid);

%definimos el puerto serial a utilizar
s = serial(serialPort);

%configuramos el baudrate del puerto
set(s,'BaudRate',9600);
set(s,'Terminator',13);

%abrimos el puerto serial
disp('Cerrar la figura para detener el programa');
fopen(s);

%definimos la matriz de almacenamiento
OUT = '';

tic

while ishandle(plotGraph);

dat = fscanf(s);
long = length(dat);

for i=1:long

out=dat(i);

if out ~= 'i' && out ~= 'I'
OUT = [OUT out];
else
val = OUT;

if length(val) < 63
val = ['0' '0' '0' '0' '0'...
'0' '0' '0' '0' '0'...
'0' '0' '0' '0' '0'...
'0' '0' '0' '0' '0'...
'0' '0' '0' '0' '0'...
'0' '0' '0' '0' '0'...
'0' '0' '0' '0' '0'...
'0' '0' '0' '0' '0'...
'0' '0' '0' '0' '0'...
'0' '0' '0' '0' '0'...
'0' '0' '0' '0' '0'...
'0' '0' '0' '0' '0'...
'0' '0' '0'];
end

cuenta = cuenta + 1;
tiempo(cuenta) = toc;
%BA(cuenta) = str2num(val(1:7));
%EA(cuenta) = str2num(val(8:13));
%HA(cuenta) = str2num(val(14:19));
XA(cuenta) = str2num(val(20:25));
%YA(cuenta) = str2num(val(26:31));
%ZA(cuenta) = str2num(val(32:37));

%Set Axis according to Scroll Width
if(scrollWidth > 0)
set(plotGraph,'XData',tiempo(tiempo > tiempo(cuenta)-scrollWidth),...
'YData',XA(tiempo > tiempo(cuenta)-scrollWidth));
axis([tiempo(cuenta)-scrollWidth tiempo(cuenta) min max]);

else
set(plotGraph,'XData',tiempo,'YData',XA);
axis([0 tiempo(cuenta) min max]);

end

pause(delay);

OUT = '';
end

end

end

fclose(s);

disp('Lectura terminada...');

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder