While loop not breaking even though condition is met.

5 views (last 30 days)
I have an issue where my while loop continues to run even though my if statement, containing a break, inside the loop is met. I have tested this by displaying strings. It does print 'moving stage' when a push the button as well as 'stop stage' when i push it again. The flags I have defined changes between 1 or 0 depending on a button i push in a GUI. How can I terminate my loop?
function Standa_cmd(Stage_functions_settings)
while 1
pause(1)
disp('moving stage')
flag = Stage_functions_settings.move_x; % This struct field changes value between 1 or 0 depending on the button push in the gui
if(flag == 0)
disp('stop stage')
break
end
end
end
  3 Comments
Christoffer Sørensen
Christoffer Sørensen on 11 Nov 2022
@VBBV I checked the class of the "Stage_functions_settings.move_x" field and it is a double, so I'm not sure that is the problem. In the app, I just use the value of the button to set the field of the struct to either 0 or 1. So the value of the button is not passed on to any other function.

Sign in to comment.

Accepted Answer

Bruno Luong
Bruno Luong on 11 Nov 2022
Edited: Bruno Luong on 11 Nov 2022
Just guessing; Might be it breaks but your function is entered again or there are many instances of function in queue, log more
function Standa_cmd(Stage_functions_settings)
disp('Standa_cmd is called')
while 1
pause(1)
disp('moving stage')
flag = Stage_functions_settings.move_x; % This struct field changes value between 1 or 0 depending on the button push in the gui
if(flag == 0)
disp('stop stage')
break
end
end
disp('I''m out of the loop and about to quit the function')
end
  13 Comments
Christoffer Sørensen
Christoffer Sørensen on 21 Nov 2022
Thank you for the elaborate answer! I will try to impliment this. In the mean time I managed to make a while loop terminate. But I will try to implement a more robust scheme for the future. Below is my temporary solution:
function StateButtonValueChanged(app, event)
flag = 1;
while(flag)
f = app.StateButton.Value;
app.Stage_functions_settings = setfield(app.Stage_functions_settings,'move_x',1);
Equipment_calls(app.Equipment_list,app.Equipment_libs,app.Stage_functions_settings)
drawnow;
if isequal(f,0)
app.Stage_functions_settings = setfield(app.Stage_functions_settings,'move_x',0);
Equipment_calls(app.Equipment_list,app.Equipment_libs,app.Stage_functions_settings)
flag = 0;
break;
end
end
end

Sign in to comment.

More Answers (1)

Image Analyst
Image Analyst on 11 Nov 2022
I think the pushbutton does not set the flag. I've seen this in GUIDE and this is why I use checkboxes instead of a push button. Then simply check the value of the checkbox inside your while loop.
Nonetheless it is possible to use a push button. See attached little demo.

Categories

Find more on Entering Commands in Help Center and File Exchange

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!