How to simplify plotting using a function?

12 次查看(过去 30 天)
clear all; close all;
a = arduino('COM4', 'Uno');
disp 'Connection received!'
pause (3);
figure
h = animatedline;
ax = gca;
ax.YGrid = 'on';
ax.YLim = [2.4 3.8];
title('Moisture Sensor Voltage vs Time (live)');
xlabel('Time [HH:MM:SS]');
ylabel('Voltage [volt]');
stop = false;
startTime = datetime('now');
while ~stop
voltage = readVoltage(a, 'A1');
t = datetime('now') - startTime;
addpoints(h,datenum(t),voltage)
ax.XLim = datenum([t-seconds(15) t]);
datetick('x','keeplimits')
drawnow
while (voltage < 2.9)
voltage = readVoltage(a, 'A1');
t = datetime('now') - startTime;
addpoints(h,datenum(t),voltage)
ax.XLim = datenum([t-seconds(15) t]);
datetick('x','keeplimits')
drawnow
end
while (voltage > 2.9)
writeDigitalPin(a,'D2',1);
disp 'Pump is on!'
voltage = readVoltage(a, 'A1');
t = datetime('now') - startTime;
addpoints(h,datenum(t),voltage)
ax.XLim = datenum([t-seconds(15) t]);
datetick('x','keeplimits')
drawnow
if (voltage < 2.9)
writeDigitalPin(a,'D2',0)
disp 'Pump is off!'
while (voltage < 2.9)
voltage = readVoltage(a, 'A1');
t = datetime('now') - startTime;
addpoints(h,datenum(t),voltage)
ax.XLim = datenum([t-seconds(15) t]);
datetick('x','keeplimits')
drawnow
end
end
end
end
Notice how I repeat the following lines over and over again?
voltage = readVoltage(a, 'A1');
t = datetime('now') - startTime;
addpoints(h,datenum(t),voltage)
ax.XLim = datenum([t-seconds(15) t]);
datetick('x','keeplimits')
drawnow
How can I simplify this code so that I don't need to repeat all 6 lines every loop and can call a function to do it.
  1 个评论
Peter Perkins
Peter Perkins 2022-12-9
Slightly off-topic: not clear to me that you need to use the old datenum format for your times. I think you should be able to plot against durations here, and will ultimately be happier.

请先登录,再进行评论。

采纳的回答

Askic V
Askic V 2022-12-6
Why not trying straightforward:
function readVoltageDraw(a, startTime, ax)
voltage = readVoltage(a, 'A1');
t = datetime('now') - startTime;
addpoints(h,datenum(t),voltage)
ax.XLim = datenum([t-seconds(15) t]);
datetick('x','keeplimits')
drawnow
end
and call it just like this:
while (voltage > 2.9)
writeDigitalPin(a,'D2',1);
disp 'Pump is on!'
readVoltageDraw(a, startTime, ax)
...
  4 个评论
Askic V
Askic V 2022-12-6
Yes, I forgot to specify animated handle h as an input argument. Thank you Torsten for point that out.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 MATLAB 的更多信息

标签

产品


版本

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by