ploting two function on the same graph and the values get updated in the while loop

3 ビュー (過去 30 日間)
Taha Otaifah
Taha Otaifah 2023 年 6 月 1 日
回答済み: Shubham 2023 年 6 月 5 日
Hallo Everyone
I would like to draw two functions on the same graph and the values of the x1,x2 and y1,y2 gets updated in the while loop to give me real-time-graph alike. My code is working fine however i would like to insert the second function to the h1 and somehow i was not able to do so. For the graph i would like to have the x1 = timeStampsVec, y1= angVelVec , x2 = signalVec and y2 = punktVec . Can anyone please help me. I have wrote the whole code here to have a better image and understanding of what i am trying to do:
line 47
line 49
line 54
line 56
Thank you in advance
clear;
clc;
% Ein Arduino-Objekt erstellen
a = arduino('COM16', 'Nano33BLE');
a1 = serialport('COM14', 9600);
imu = lsm9ds1(a, 'SampleRate', 200, 'SamplesPerRead', 1, 'Bus', 1, 'OutputFormat', 'matrix','TimeFormat','duration');
%Eingangspuffer und Ausgangspuffer leeren
flush(a1);
% Initialisierung des Plots:
figure;
subplot(1, 1, 1)
h1 = plot(0, 0);
xlabel('Zeit (s)');
ylabel('Winkelgeschwindigkeit (rad/s)');
grid on;
ylim([-3 3]);
% Initialisierung der Vektoren:
t = datetime('now');
angVelVec = 0;
accelVec = 0;
signalVec = 0;
timeStampsVec = 0;
punktVec=[];
punkte=1
%ttttt
signalref = str2double(readline(a1));
% Schleife zum kontinuierlichen Lesen des Signals von D2 und zur Aktualisierung der Darstellung
tic;
startzeit = tic;
while toc(startzeit) < 10
[accel, gyro, mag, timeStamps, overrun] = imu.read;
% Siganlzeit aus milis() function
if a1.NumBytesAvailable > 0
signal1 = str2double(readline(a1));
signal2 = signal1 -signalref
signalVec = [signalVec signal2];
punktVec=[punktVec punkte];
disp(signal2);
end
% Aktualisierung der Signalvektoren
angVelVec = [angVelVec gyro(2)]; % um die x-Achse
accelVec = [accelVec accel(3)];
timeStampsVec = [timeStampsVec second(timeStamps)];
% Aktualisieren der Plots
if isvalid(h1)
set(h1, 'XData', timeStampsVec, 'YData', angVelVec);
end
drawnow;
end

回答 (1 件)

Shubham
Shubham 2023 年 6 月 5 日
Hi Taha,
To add a second function to the plot, you can simply define a new variable for the second plot and use the "hold on" command to plot both functions on the same figure. Here is the modified code:
clear;
clc;
% Ein Arduino-Objekt erstellen
a = arduino('COM16', 'Nano33BLE');
a1 = serialport('COM14', 9600);
imu = lsm9ds1(a, 'SampleRate', 200, 'SamplesPerRead', 1, 'Bus', 1, 'OutputFormat', 'matrix','TimeFormat','duration');
%Eingangspuffer und Ausgangspuffer leeren
flush(a1);
% Initialisierung des Plots:
figure;
subplot(1, 1, 1)
h1 = plot(0, 0);
xlabel('Zeit (s)');
ylabel('Winkelgeschwindigkeit (rad/s)');
grid on;
ylim([-3 3]);
% Initialisierung der Vektoren:
t = datetime('now');
angVelVec = 0;
accelVec = 0;
signalVec = 0;
timeStampsVec = 0;
punktVec=[];
punkte=1
%ttttt
signalref = str2double(readline(a1));
% Schleife zum kontinuierlichen Lesen des Signals von D2 und zur Aktualisierung der Darstellung
tic;
startzeit = tic;
% Define a new variable for the second plot
h2 = animatedline('Color','r');
while toc(startzeit) < 10
[accel, gyro, mag, timeStamps, overrun] = imu.read;
% Siganlzeit aus milis() function
if a1.NumBytesAvailable > 0
signal1 = str2double(readline(a1));
signal2 = signal1 -signalref
signalVec = [signalVec signal2];
punktVec=[punktVec punkte];
disp(signal2);
end
% Aktualisierung der Signalvektoren
angVelVec = [angVelVec gyro(2)]; % um die x-Achse
accelVec = [accelVec accel(3)];
timeStampsVec = [timeStampsVec second(timeStamps)];
% Aktualisieren der Plots
if isvalid(h1)
set(h1, 'XData', timeStampsVec, 'YData', angVelVec);
end
% Add second function to the same plot
if isvalid(h2)
addpoints(h2, signalVec,punktVec);
end
% Enable hold on command to keep both functions
hold on
drawnow;
end
I hope this helps!

カテゴリ

Help Center および File ExchangeSmoothing and Denoising についてさらに検索

製品


リリース

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by