MATLAB: Break loop with button click Appdesigner GUI [Both plot and button are in different callback functions]

for loopMATLABmatlab functionmatlab gui

I have a GUI MATLAB
I have a button
and there is a loop like this
function RUN()
t=1:0.01:3600;
for i=1:numel(t)
y(1,i)=readValue();
plot(t(1:i),Tco(1:i));
pause(0.02)
end
end
function BUTTON_PRESS()
%BREAK FROM THAT LOOP
end
I want to break this loop when I click my button

Best Answer

function main
FigH = figure;
ButtonH = uicontrol(FigH, 'Style', 'PushButton', 'String', 'Stop',
'Callback', @ButtonPressed, 'UserData', 0);
RUN(ButtonH);
end
function ButtnPressed(ButtonH, EventData)
ButtonH.UserData = 1;
end
function RUN(ButtonH)
t = 1:0.01:3600;
for i = 1:numel(t)
y(1,i) = readValue();
plot(t(1:i), Tco(1:i));
pause(0.02);
if ButtonH.UserData
break;
end
end
end
If there is really no chance to obtain a clean providing of the button's handle, use the tag to find it dynamically - but this is less nice:
function main
FigH = figure;
ButtonH = uicontrol(FigH, 'Style', 'PushButton', 'String', 'Stop', ...
'Callback', @ButtonPressed, 'UserData', 0, ...
'Tag', 'myUniqueButtonTag_in: main.m');
RUN();
end
function ButtnPressed(ButtonH, EventData)
ButtonH.UserData = 1;
end
function RUN()
ButtonH = findobj(allchild(groot), 'Tag', 'myUniqueButtonTag_in: main.m');
... same as above
end
Care for the situation, where two figures are existing or none, e.g. by:
function RUN()
ButtonH = findobj(allchild(groot), 'Tag', 'myUniqueButtonTag_in: main.m');
if numel(ButtonH) > 1
warning('Multiple stop buttons found.')
end
...
if ~isempty(ButtonH) && any([ButtonH.UserData])
end
Related Question