Two graphs at the same time

35 views (last 30 days)
Ameen Mouazzen
Ameen Mouazzen on 20 Apr 2019
Edited: Ameen Mouazzen on 21 Apr 2019
PLEASE HELP
Hello,
I have this code that is used with arduino package
the code will be used to get data from two sensors:
  1. load cell that measures load
  2. displacement sensor that measures displacement
problems:
  1. this code is showing two graphs but only one graph has labels
  2. only one graph is showing data results
this is the code: (please note that i'm new to MATLAB and coding in general)
clear
clc
a=arduino('com3','Uno')
loadcell=addon(a,'ExampleAddon/HX711',{'D2','D3'})
plotTitle1 = 'Load VS Time';
xLabel1 = 'Elapsed Time (s)';
yLabel1 = 'Load (KN)';
legend1 = 'Load Cell 1'
plotTitle2 = 'Displacement VS Time';
xLabel2 = 'Elapsed Time (s)';
yLabel2 = 'Displacement (mm)';
legend2 = 'Displacement Sensor 1'
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
yMax1 = 10000000
yMin1 = 0
yMax2 = 10000000
yMin2 = 0
plotGrid = 'on';
min1 = 0;
max1 = 10000;
min2 = 0;
max2 = 10000;
delay = .001;
time = 0;
data1 = 0;
data11 = 0;
data12 = 0;
data2 = 0;
data21 = 0;
data22 = 0;
count = 0;
subplot(2,4,1)
plotGraph1 = plot(time,data1,'-r')
subplot(2,4,2)
plotGraph2 = plot(time,data2,'-r')
hold on
title(plotTitle1,'FontSize',5);
xlabel(xLabel1,'FontSize',5);
ylabel(yLabel1,'FontSize',5);
axis([yMin1 yMax1 min1 max1]);
title(plotTitle2,'FontSize',5);
xlabel(xLabel2,'FontSize',5);
ylabel(yLabel2,'FontSize',5);
axis([yMin2 yMax2 min2 max2]);
grid(plotGrid);
tic
figure (1)
while ishandle(plotGraph1)
dat1 = read_HX711(loadcell)-1940.225269
count = count + 1;
time(count) = toc;
data1(count) = dat1(1);
set(plotGraph1,'XData',time,'YData',data1);
axis([0 time(count) min1 max1]);
pause(delay);
end
hold on
figure (2)
while ishandle(plotGraph2)
dat2 = readVoltage(a,'A0')*80
count = count + 1;
time(count) = toc;
data2(count) = dat2(1);
set(plotGraph2,'XData',time,'YData',data2);
axis([0 time(count) min2 max2]);
pause(delay);
end
hold off
delete(a);
disp('Plot Closed and arduino object has been deleted');

Accepted Answer

darova
darova on 20 Apr 2019
Try to use subplot() each time you want plot or modify something in figure
subplot(2,4,1)
plotGraph1 = plot(time,data1,'-r')
title(plotTitle1,'FontSize',5);
xlabel(xLabel1,'FontSize',5);
ylabel(yLabel1,'FontSize',5);
axis([yMin1 yMax1 min1 max1]);
subplot(2,4,2)
plotGraph2 = plot(time,data2,'-r')
title(plotTitle2,'FontSize',5);
xlabel(xLabel2,'FontSize',5);
ylabel(yLabel2,'FontSize',5);
axis([yMin2 yMax2 min2 max2]);
grid(plotGrid);
tic
% figure (1) % already created with "plotGraph1 = plot(time,data1,'-r')"
subplot(2,4,1), hold on
while ishandle(plotGraph1)
dat1 = read_HX711(loadcell)-1940.225269
count = count + 1;
time(count) = toc;
data1(count) = dat1(1);
% set(plotGraph1,'XData',time,'YData',data1);
plot(time, data1, '-r')
axis([0 time(count) min1 max1]);
pause(delay);
end
hold off
subplot(2,4,1), hold on
% figure (2) % already created with "plotGraph2 = plot(time,data2,'-r')"
while ishandle(plotGraph2)
dat2 = readVoltage(a,'A0')*80
count = count + 1;
time(count) = toc;
data2(count) = dat2(1);
% set(plotGraph2,'XData',time,'YData',data2);
plot(time, data2, '-r')
axis([0 time(count) min2 max2]);
pause(delay);
end
hold off
  6 Comments
darova
darova on 21 Apr 2019
To draw a line "plot" needs at least 2 points ( plot([x1 x2], [y1 y2]) )
subplot(2,4,1), hold on
subplot(2,4,2), hold on
tic
n = 2000; % 2000 measurements
[time, data1, data2] = deal( zeros(1,n) );
time(1) = 0;
data1(1) = read_HX711(loadcell)-1940.225269
data2(2) = readVoltage(a,'A0')*80
for count = 2:n
dat1 = read_HX711(loadcell)-1940.225269
dat2 = readVoltage(a,'A0')*80
time(count) = toc;
data1(count) = dat1(1);
data2(count) = dat2(1);
subplot(2,4,1)
plot([time(count-1) time(count)], ...
[data1(count-1) data1(count)],'.-b');
% axis([0 time(count) min1 max1]);
subplot(2,4,2)
plot([time(count-1) time(count)], ...
[data2(count-1) data2(count)],'.-r');
% axis([0 time(count) min2 max2]);
drawnow
pause(delay);
end
subplot(2,4,1), hold off
subplot(2,4,2), hold off
delete(a);
disp('Plot Closed and arduino object has been deleted');
Which way do you stop the code? Closing figure or script is not enough
Use Ctrl+C

Sign in to comment.

More Answers (1)

Ameen Mouazzen
Ameen Mouazzen on 21 Apr 2019
Edited: Ameen Mouazzen on 21 Apr 2019
Thank you very much for the reply.
Everything now is working correctly.
The Ctrl+C command worked.
New problems:
  • the graphs are showing no lables at all
  • the graphs take only half the screen. is there a way to make them bigger?
  • no gridlines shown in the graphs
clear
clc
a=arduino('com3','Uno')
loadcell=addon(a,'ExampleAddon/HX711',{'D2','D3'})
plotTitle1 = 'Load VS Time';
xLabel1 = 'Elapsed Time (s)';
yLabel1 = 'Load (KN)';
legend1 = 'Load Cell 1'
plotTitle2 = 'Displacement VS Time';
xLabel2 = 'Elapsed Time (s)';
yLabel2 = 'Displacement (mm)';
legend2 = 'Displacement Sensor 1'
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
yMax1 = 10000000
yMin1 = 0
yMax2 = 10000000
yMin2 = 0
plotGrid = 'on';
min1 = -10000000000;
max1 = 10000000000;
min2 = -10000000000;
max2 = 10000000000;
delay = .001;
time = 0;
data1 = 0;
data11 = 0;
data12 = 0;
data2 = 0;
data21 = 0;
data22 = 0;
count = 0;
subplot(2,4,1), hold on
subplot(2,4,2), hold on
tic
n = 2000; % 2000 measurements
[time, data1, data2] = deal( zeros(1,n) );
time(1) = 0;
data1(1) = read_HX711(loadcell)
data2(2) = readVoltage(a,'A0')
for count = 2:n
dat1 = read_HX711(loadcell)-1940.225269
dat2 = readVoltage(a,'A0')*80
time(count) = toc;
data1(count) = dat1(1);
data2(count) = dat2(1);
subplot(2,4,1)
plot([time(count-1) time(count)], ...
[data1(count-1) data1(count)],'.-b');
% axis([0 time(count) min1 max1]);
subplot(2,4,2)
plot([time(count-1) time(count)], ...
[data2(count-1) data2(count)],'.-r');
% axis([0 time(count) min2 max2]);
drawnow
pause(delay);
end
subplot(2,4,1), hold off
subplot(2,4,2), hold off
delete(a);
disp('Plot Closed and arduino object has been deleted');
  3 Comments
Ameen Mouazzen
Ameen Mouazzen on 21 Apr 2019
I found a problem in factoring (dat1)
dat1 should be substracted from 8411800 and then multiplied by 0.000462214
as follows:
(dat1-8411800)*0.000462214
the brackets are important
have been trying for an hour
here is the script
clear
clc
a=arduino('com3','Uno')
loadcell=addon(a,'ExampleAddon/HX711',{'D2','D3'})
plotTitle1 = 'Load VS Time';
xLabel1 = 'Elapsed Time (s)';
yLabel1 = 'Load (KN)';
legend1 = 'Load Cell'
plotTitle2 = 'Displacement VS Time';
xLabel2 = 'Elapsed Time (s)';
yLabel2 = 'Displacement (mm)';
legend2 = 'Displacement Sensor'
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 2 2]);
yMax1 = 10000000
yMin1 = 0
yMax2 = 10000000
yMin2 = 0
plotGrid = 'on';
min1 = 0;
max1 = 1000;
min2 = 0;
max2 = 1000;
delay = .001;
time = 0;
data1 = 0;
data11 = 0;
data12 = 0;
data2 = 0;
data21 = 0;
data22 = 0;
count = 0;
subplot(1,2,1), hold on
subplot(1,2,2), hold on
tic
n = 2000;
[time, data1, data2] = deal( zeros(1,n) );
time(1) = 0;
data1(1) = read_HX711(loadcell)
data2(2) = readVoltage(a,'A0')
for count = 2:n
dat1 = read_HX711(loadcell)-8411800*(-0.000462214)
dat2 = readVoltage(a,'A0')*90
time(count) = toc;
data1(count) = dat1(1);
data2(count) = dat2(1);
subplot(1,2,1)
xlabel(xLabel1,'FontSize',15);
ylabel(yLabel1,'FontSize',15);
plot([time(count-1) time(count)], ...
[data1(count-1) data1(count)],'.-b');
subplot(1,2,2)
xlabel(xLabel2,'FontSize',15);
ylabel(yLabel2,'FontSize',15);
plot([time(count-1) time(count)], ...
[data2(count-1) data2(count)],'.-r');
drawnow
pause(delay);
end
subplot(1,2,1), hold off
subplot(1,2,2), hold off
delete(a);
disp('Plot Closed and arduino object has been deleted');

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!