How to make the time invtervals between two index fixed when plotting in real time using function 'tic toc'

조회 수: 2 (최근 30일)
Hi everyone,
I meet a problem when I'm trying to plotting some signals in real time from Arduino to Matltb. I use 'tic toc' to get elapsed time and it works. But when I look back to the 'time' output, the intervals between two neighouring index are irregular. But I want the time intervals to be fixed, for example, it recordes index every 0.3 seconds regularly. My code is look like below:
a = arduino()
%some other code here
tic
while ishandle(plotGraph1)
count = count + 1;
time(count) = toc;
%some other code here
end
I understand why that tic toc can lead to such irregular time intervals, so is there any other options I can use to represent the elapsed time with consistent increasement? Thanks a lot for your help!

답변 (1개)

KALYAN ACHARJYA
KALYAN ACHARJYA 2021년 3월 15일
편집: KALYAN ACHARJYA 2021년 3월 15일
"But I want the time intervals to be fixed, for example, it recordes index every 0.3 seconds regularly. My code is look like below"
This way?
while condition
%record
pause(0.3)%
end
Tic ​​start is a stopwatch timer, it return time requiremnets for the code execution until toc. Exact Time: Please note, even in the given code, you must calibrate the fraction of tiny fraction of second required to run the loop (excluding pause).
  댓글 수: 1
LuYao Guo
LuYao Guo 2021년 3월 15일
편집: LuYao Guo 2021년 3월 15일
Hi Sir, first of all, thank you for answering. I try the code 'pause', and it makes the intervals change less, although they are still not consistent. Could you please explain more about the 'calibration' please? Do I need to calibrate inside the while loop? BTW, in my while loop, I read and plot the data from Arduino, is it because this loop is complex that leads to the probleams of irregular time invertals? Just in case, I put the whole while loop here.
tic
while ishandle(plotGraph1)
count = count + 1;
time(count) = toc;
dat1 = readVoltage(a,'A2');
dat2 = readVoltage(a,'A3');
%moving average filter
dat1_filtered = movmean(dat1,10);
dat2_filtered = movmean(dat2,10);
data1(count) = dat1_filtered(1);
data2(count) = dat2_filtered(1);
set(plotGraph1,'XData',time,'YData',data1);
set(plotGraph2,'XData',time,'YData',data2);
ylim('auto');
axis([time(count)-10 time(count) min max]);
%Update the graph
%pause(delay);
pause(0.33333);
end
toc
Thank you very much.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 MATLAB Support Package for Arduino Hardware에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by