GUI show only last 5 values in plot

1 view (last 30 days)
Pavel
Pavel on 21 Aug 2011
Hello everyone! I am working on a GUI that is supposed to display and log data from a pressure sensor. The writing of the Logfile already works fine; The display should be done on two ways: one "digital" display that shows the current value (I am just updating a static text in the GUI) and a Graph that shows the last n values in a yx-Graph. For the latter I modified a script from the fileexchange that does almost exactly what i wanted, only that it kind of compresses the x-Axis with every new y-value in order to show them all. Since I just want the last n values to be shown, i thougt it would be easiest to redefine xlim with every new pressure value.
It kind of works, but the graph now "flips" between showing only the last 5 values and all of them (with a compressed x-Axis). I have no Idea why it does that, it seems that after each loop the XlimMode is set to auto before i redefine xlim again.
Would be really thankful if someone had a clue for me
As you can see from my code below i am an absolute beginner in Matlab programming, so I am open, thankful and happy about any suggestions optimizing the code as well.
kind regards, Pavel
P.s. heres the part of the GUI where i am stuck.:
% --- Outputs from this function are returned to the command line.
function varargout = Controler_GUI_OutputFcn(hObject, eventdata, handles)
global Exitflag;
global Writeflag;
global Filename;
global Filenamepath;
global Depth;
startline=2;
column='A';
count=1;
%%Set up Figure
time=now; % initialising "time"
Depth=rand(1);%Initialising "Depth"
plotHandle = plot(handles.axes1,time,Depth,'Marker','.','LineWidth',2,'Color','blue');%[0 0 0]);
xlim('manual');
%xlim(handles.axes1,[min(time) max(time+0.5)]);
while Exitflag==1; % Value controlled by pushbutton
Depthwrite=rand(1);% Simulating Data input--> Insert request here
set(handles.text2,'String',Depthwrite); % Display Depth in "static String" Display
if Writeflag==1; % ...then record data & display Data in Graph --> Controlled by a toggle button
% Display Graph
if count<5;
xlim(handles.axes1,[time(1) time(numel(time))+0.5]); % Until I have at least 5 Values in Depth, show theam all
Depth(count)=Depthwrite;
time(count) = datenum(clock);
set(plotHandle,'YData',Depth,'XData',time);
datetick('x','mm/DD HH:MM');
else
xlim(handles.axes1,[time(count-4) time(count-1)]); %From here only show the last 5 Values
Depth(count)=Depthwrite;
time(count) = datenum(clock);
set(plotHandle,'YData',Depth,'XData',time);
datetick('x','mm/DD HH:MM');
end
% Write Excel-File
Data={Datestr(now,'yyyy-mm-dd'),datestr(now,'HH:MM:SS'),Depthwrite}; % 1by2 Array for Excel recording
xlswrite(Filenamepath,Data,Filename,strcat(num2str(startline),column));
startline=startline+1;
count=count+1;
end
guidata(hObject, handles);
pause(1);
end varargout{1} = handles.output;

Accepted Answer

bym
bym on 21 Aug 2011
don't know if it will help, but explore the use of
drawnow()
also, be aware of the datetick options 'keeplimits' and 'keepticks'
  1 Comment
Pavel
Pavel on 23 Aug 2011
Thanks a lot, U saved my day! It was the 'keeplimits' parameter I forgot to set!

Sign in to comment.

More Answers (0)

Categories

Find more on Specifying Target for Graphics Output in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!