How to simplify plotting using a function?

12 visualizaciones (últimos 30 días)
Md Zarif Raiyan
Md Zarif Raiyan el 6 de Dic. de 2022
Comentada: Peter Perkins el 9 de Dic. de 2022
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 comentario
Peter Perkins
Peter Perkins el 9 de Dic. de 2022
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.

Iniciar sesión para comentar.

Respuesta aceptada

Askic V
Askic V el 6 de Dic. de 2022
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 comentarios
Md Zarif Raiyan
Md Zarif Raiyan el 6 de Dic. de 2022
Just did that, thank you, it works now :)
Askic V
Askic V el 6 de Dic. de 2022
Yes, I forgot to specify animated handle h as an input argument. Thank you Torsten for point that out.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre MATLAB en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by