Matlab en temps réel ploting plusieurs données à partir du port série
Mon application lit les données à partir de capteurs au travers d'une carte ARDUINO UNO plate-forme, puis enfin à travers du port série, j'ai réussi à lire toutes les données que j'ai besoin de MATLAB. alors maintenant, j'ai 3 les données que je veux tracer (données data2 data3) en temps réel SUR LE MÊME GRAPHIQUE.
J'ai aussi réussi à tracer une données à la fois, avec un peu de code que j'ai trouvé sur mathworks et modifié un peu, ce qui ne convient pas à mon projet.
Voici le code matlab que je suis en utilisant le tracé d'une des données:
clear
clc
%User Defined Properties
serialPort = 'COM7'; % define COM port #
baudeRate = 115200;
plotTitle = 'Serial Data Log'; % plot title
xLabel = 'Elapsed Time (s)'; % x-axis label
yLabel = 'Data'; % y-axis label
plotGrid = 'on'; % 'off' to turn off grid
min = -200; % set y-min
max = 200; % set y-max
scrollWidth = 10; % display period in plot, plot entire data log if <= 0
delay = .01; % make sure sample faster than resolution
%Define Function Variables
time = 0;
data = 0;
data2 = 0;
data3 = 0;
count = 0;
%Set up Plot
plotGraph = plot(time,data,time,data2,time,data3);
title(plotTitle,'FontSize',25);
xlabel(xLabel,'FontSize',15);
ylabel(yLabel,'FontSize',15);
axis([0 10 min max]);
grid(plotGrid);
%Open Serial COM Port
s = serial(serialPort, 'BaudRate',baudeRate)
disp('Close Plot to End Session');
fopen(s);
tic
while ishandle(plotGraph) %Loop when Plot is Active
dat = fscanf(s,'%f'); %Read Data from Serial as Float
if(~isempty(dat) && isfloat(dat)) %Make sure Data Type is Correct
count = count + 1;
time(count) = toc; %Extract Elapsed Time
data(count) = dat(1); %Extract 1st Data Element
data2(count) = dat(2);
data3(count) = dat(3);
data(count);
data2(count);
data3(count);
%Set Axis according to Scroll Width
if(scrollWidth > 0)
set(plotGraph,'XData',time(time > time(count)-scrollWidth),'YData',data3(time > time(count)-scrollWidth));
%plot(time(time > time(count)-scrollWidth),data3(time > time(count)-scrollWidth));
axis([time(count)-scrollWidth time(count) min max]);
%set(plotGraph,'XData',time(time > time(count)-scrollWidth),'YData',data3(time > time(count)-scrollWidth));
%axis([time(count)-scrollWidth time(count) min max]);
else
set(plotGraph,'XData',time,'YData',data);
axis([0 time(count) min max]);
end
%Allow MATLAB to Update Plot
pause(delay);
end
end
%Close Serial COM Port and Delete useless Variables
fclose(s);
clear count dat delay max min baudRate plotGraph plotGrid plotTitle s ...
scrollWidth serialPort xLabel yLabel;
disp('Session Terminated...');
J'ai besoin de tracer tous les 3 datas (données data2 data3) sur le graphique avec des couleurs différentes. S'il vous plaît aidez-moi à sortir d'ici.
hold on
premier. Aussi, jetez un oeil à mathworks.com/help/matlab/ref/lineseriesproperties.html et de se concentrer sur X/Y/Z/Data
.tenir sur la ne fonctionne pas
OriginalL'auteur hanga mihai | 2014-07-23
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé le code à partir de la même source que vous êtes un de mes projets. Si vous avez encore besoin d'aide, voici ma version modifiée du code que j'ai utilisé pour tracer trois lignes de données à partir d'un accéléromètre. Elle parcelles magnifiquement. Cependant, en raison du temps qu'il faut pour faire fscanf(), vous ne pouvez pas obtenir et de tracer un signal en temps réel plus rapide que toutes les 50ms ou sans aliasing.
OriginalL'auteur Tyler
Utilisation
line
fonction pour créer une ligne supplémentaire sur la même parcelle.À partir de l'Aide->MatLab->Graphiques->Manipuler des Objets Graphiques->Haut Niveau Comparativement Faible Niveau
OriginalL'auteur LVitya
Utilisez simplement la suivante:
OriginalL'auteur kay_tsao