以下のコードを使用して、Cortex M3 マイクロコントローラーからの 5 つのアナログ入力をリアルタイム (ライブ タイム) にプロットしています。しばらくして(数秒)、プロットがそれに応じてレギングしていることに気付きました。ラグは約10秒で、どうやらそれは増加し続けています。以下のコードのアスタリスクの間の行にコメントを付けると、ラグがなくなったことに気付きました。これは、マイクロコントローラ モジュールの LED が一定の速度で点滅し続けていたことに気づきました。マイコン側ではないことを確認するため、問題のなかったPuttyも使用しました。したがって、信号のプロットが問題の原因であると想定しています。なぜこれが起こっているのか誰にも分かりますか?この問題を解決するために私にできることはありますか?
以下は、使用されるコードです。
% Reference: https://developer.mbed.org/cookbook/Interfacing-with-Matlab (SEE 'Serial Communication' SECTION)
delete(instrfindall); % if any port is already opened by MATLAB its gonna find and close it
TIMEOUT = 5; %time to wait for data before aborting
XPOINTS = 1000; %number of points along x axis
try % this is the try/catch to Handle Errors
%create serial object to represent connection to mbed
mbed = serial('COM5', ...
'BaudRate', 9600, ...
'Parity', 'none', ...
'DataBits', 8, ...
'StopBits', 1); %change depending on mbed configuration
set(mbed,'Timeout',TIMEOUT); %adjust timeout to ensure fast response when mbed disconnected
fopen(mbed); %open serial connection
position = 1; %initialise graph variables
time = 1;
x = [(1:XPOINTS)' (1:XPOINTS)' (1:XPOINTS)' (1:XPOINTS)' (1:XPOINTS)'];
xlabels = (1:XPOINTS);
y = zeros(XPOINTS,5);
while(1)
values = fscanf(mbed, '%d,%d,%d,%d,%d'); %get values from serial into vector
y(position,:) = values'; %put into y to be displayed
%update position on x-axis and x-axis labels
xlabels(position) = time;
time = time + 1;
if (position < XPOINTS)
position = position + 1;
else
position = 1;
end
%*******************************************************************************************
%display
plot(x,y);
set(gca, 'XTick', 1:XPOINTS);
set(gca, 'XTickLabel', xlabels);
drawnow; %this is required to force the display to update before the function terminates
%*******************************************************************************************
end
fclose(mbed); %close connection
delete (mbed) % deleting serial port object
clear mbed
clear all
catch
%in case of error or mbed being disconnected
disp('Failed!');
fclose(mbed); %close connection to prevent COM port being lokced open
delete (mbed) % deleting serial port object
clear mbed
clear all
end