Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Thread Subject:
While loop stopped by a GUI button

Subject: While loop stopped by a GUI button

From: Cédric L

Date: 7 Apr, 2005 07:59:30

Message: 1 of 4

I'm trying to run a while-loop and I want to be able to stop it
thanks to a gui button. I'd like not to use GUIDE in order to really
understand everything I'm doing. Therefore I tried the following
piece of code :

First attempt:

pause = 0;

togglebutton1 = uicontrol('Style', 'togglebutton', 'Callback', 'pause
= 1', ...);

while pause == 0
    % My while-loop
end

When I press my toggle button I can check in the Matlab main window
that the pause variable turns to 1 but my program does not exit the
while loop. Why is that so ?

Does anybody have a solution to that problem ?

Moreover what I'd really want to do is a while-loop that I can
start/stop/restart thanks to a toggle button. Any ideas ?

Subject: While loop stopped by a GUI button

From: Titus Edelhofer

Date: 7 Apr, 2005 14:04:57

Message: 2 of 4


Hi,

add a drawnow at the end of your while loop so the program flushes events...

Titus

"Cédric L" <cedric.louyot@NOSPAMgmail.com> schrieb im Newsbeitrag
news:ef01731.-1@webx.raydaftYaTP...
> I'm trying to run a while-loop and I want to be able to stop it
> thanks to a gui button. I'd like not to use GUIDE in order to really
> understand everything I'm doing. Therefore I tried the following
> piece of code :
>
> First attempt:
>
> pause = 0;
>
> togglebutton1 = uicontrol('Style', 'togglebutton', 'Callback', 'pause
> = 1', ...);
>
> while pause == 0
> % My while-loop
> end
>
> When I press my toggle button I can check in the Matlab main window
> that the pause variable turns to 1 but my program does not exit the
> while loop. Why is that so ?
>
> Does anybody have a solution to that problem ?
>
> Moreover what I'd really want to do is a while-loop that I can
> start/stop/restart thanks to a toggle button. Any ideas ?

Subject: While loop stopped by a GUI button

From: Sanjeev

Date: 21 Jan, 2013 14:25:08

Message: 3 of 4

i tried doing this and even though i got it stopped the program returned an error.

??? Error using ==> imaqdevice.start at 91
Multiple VIDEOINPUT objects cannot access the same device simultaneously.

Error in ==> GUI>startstop_Callback at 89
start(source);

Error in ==> gui_mainfcn at 96
        feval(varargin{:});

Error in ==> GUI at 42
    gui_mainfcn(gui_State, varargin{:});

Error in ==>
@(hObject,eventdata)GUI('startstop_Callback',hObject,eventdata,guidata(hObject))

 
??? Error using ==> drawnow
Error while evaluating uicontrol Callback


here is my code


function varargout = GUI(varargin)
% GUI MATLAB code for GUI.fig
% GUI, by itself, creates a new GUI or raises the existing
% singleton*.
%
% H = GUI returns the handle to a new GUI or the handle to
% the existing singleton*.
%
% GUI('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in GUI.M with the given input arguments.
%
% GUI('Property','Value',...) creates a new GUI or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before GUI_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to GUI_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help GUI

% Last Modified by GUIDE v2.5 21-Jan-2013 15:48:38

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
                   'gui_Singleton', gui_Singleton, ...
                   'gui_OpeningFcn', @GUI_OpeningFcn, ...
                   'gui_OutputFcn', @GUI_OutputFcn, ...
                   'gui_LayoutFcn', [] , ...
                   'gui_Callback', []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before GUI is made visible.
function GUI_OpeningFcn(hObject, ~, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to GUI (see VARARGIN)

% Choose default command line output for GUI
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes GUI wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = GUI_OutputFcn(hObject, ~, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in startstop.
function startstop_Callback(hObject, eventdata, handles)
% hObject handle to startstop (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of startstop
clc;
source= videoinput('winvideo');
set(source, 'ReturnedColorSpace', 'RGB');
set(source, 'FramesPerTrigger', 1);
set(source, 'TriggerRepeat', inf);
triggerconfig(source, 'manual');
start(source);
thresh = 15/255;
pause(2);
trigger(source);
bg = getdata(source,1,'double');
bg_bw = rgb2gray(bg);

 if get(handles.startstop,'Value')
      set(handles.startstop,'String','Stop');
      drawnow();
  else
      set(handles.startstop,'String','Start');
      drawnow();
      stop(source);
      delete(source);
 end
  

while get(handles.startstop,'Value')
    
  
    fr_size = size(bg);
    width = fr_size(2);
    height = fr_size(1);
    f = zeros(height, width);trigger(source);
    fr=getdata(source,1,'double');
    fr1=fr(:,:,:,1);
    fr_bw1=rgb2gray(fr1);

    bg_fr_diff = abs((double(bg_bw)) - (double(fr_bw1)));

            for j=1:width % if fr_diff > thresh pixel in foreground
                for k=1:height
                    if (bg_fr_diff(k,j) > thresh)
                        f(k,j) =255;
                    else
                        f(k,j) = 0;
                    end
                end
            end

    subplot(1,2,1);
    imshow(fr1);
    title('REAL TIME VIDEO');

    subplot(1,2,2);
    imshow(uint8(f));
    title('DETECTED MOVING OBJECT');
    bg_bw=fr_bw1;
    drawnow();
  
end


could you help me out with this???
   

Subject: While loop stopped by a GUI button

From: Sadik

Date: 22 Jan, 2013 02:25:08

Message: 4 of 4

Hi Cedric,

Please see the following for a working option:

http://www.mathworks.com/matlabcentral/newsreader/view_thread/308463

Best.

Tags for this Thread

What are tags?

A tag is like a keyword or category label associated with each thread. Tags make it easier for you to find threads of interest.

Anyone can tag a thread. Tags are public and visible to everyone.

Contact us