Info
La pregunta está cerrada. Vuélvala a abrir para editarla o responderla.
How do I make a portion of a GUI code run again even though it is nested in a while loop?
    4 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
I made a code to handle a micro controller unit connected to a conveyor set-up. Most of it works fine but a part of it only activates at the beginning when i press the GUI's "START" button. Although it is nested in a while loop already it doesn't run again and the conveyor it controls stops after the condition is met the first time... here is my code:
 if queueSensor == 0
       if numel(eggQueue) <= 4
           cRamp = 1;
       else    
           cRamp = 0;
       end
    end
-----------------------------------------------------------------------------
here is the complete START button coding:
 while procStat == 1
    %send serial data command/request
    sReq = sprintf('DCOM_%d%d%d%d',cRamp, cQueue, cSeg, cBlower);
    fprintf(s,sReq);
    cBlower = 0;
    %read serial data
    [dummy,count] = fscanf(s,'%c');
    if count >= 8 
        sIdx = strfind(dummy,'DATA_');
        if sIdx == 1
           %valid data
            uRead = sscanf(dummy(6:8),'%u');
            queueSensor = uRead(2);
            segregatorSensor = uRead(1);
        end
    end
    %process serial data
    %get snapshot
    data = step(videoDevReader);
    lab_Image2 = applycform(im2double(data),cform2);
    imshow(data); drawnow;
    b = lab_Image2(:,:,3);
    bw_image = im2bw(b,0.15);
    bw_image = imcomplement(bw_image);
    bw_image = imfill(bw_image, 'holes');
    bw_labeled = bwlabel(bw_image, 8);     % Label each blob so we can make measurements of it
    blobMeasurements = regionprops(bw_labeled, bw_image, 'Area');
    allBlobAreas = [blobMeasurements.Area]; %get areas
    allowableAreaIndexes = (allBlobAreas > 9000) & (allBlobAreas < 30000); % Take the small objects.
    keeperIndexes = find(allowableAreaIndexes); 
    keeperBlobsImage = ismember(bw_labeled, keeperIndexes); 
    bw_image(~keeperBlobsImage) = 0;  % Set all non-keeper pixels to zero.
    if numel(keeperIndexes) > 0
        if detectionFlag == 0
            bw_labeled = bwlabel(bw_image, 8);     % Label each blob so we can make measurements of it
            blobMeasurements = regionprops(bw_labeled, bw_image, 'Eccentricity');
            foundE = [blobMeasurements.Eccentricity];
            if numel(foundE) > 0
                detectionFlag = 1; 
                if foundE(1) < eThreshold
                    eggMatrix = [eggMatrix 2]; %female
                    eggQueue = [eggQueue 2];
                else
                    eggMatrix = [eggMatrix 1]; %male
                    eggQueue = [eggQueue 1];
                end    
            end
        end    
    else
        detectionFlag = 0;
    end
    if queueSensor == 0
       if numel(eggQueue) <= 4
           cRamp = 1;
       else    
           cRamp = 0;
       end
    end
    if segregatorSensor == 0 
        procQueue = 1;
    end
    if procQueue == 1
       %process queue 
       procQueue = 0;
       cSeg = 0;
       sReq = sprintf('DCOM_%d%d%d%d',cRamp, cQueue, cSeg, cBlower);
       fprintf(s,sReq);
       fscanf(s); 
       if numel(eggQueue) > 0
           if eggQueue(1) == 1
            cSeg = 1;
            cBlower = 0;
            sReq = sprintf('DCOM_%d%d%d%d',cRamp, cQueue, cSeg, cBlower);
            fprintf(s,sReq);
            fscanf(s); 
            pause(0.5);
           else
            cSeg = 0;
            cBlower = 1;
            sReq = sprintf('DCOM_%d%d%d%d',cRamp, cQueue, cSeg, cBlower);
            fprintf(s,sReq);
            fscanf(s); 
            pause(0.5);
            cSeg = 1;
           end
            eggQueue = eggQueue(2:numel(eggQueue));
       end 
    end
    maleDuck_idx = find(eggMatrix == 1);
    femaleDuck_idx = find(eggMatrix == 2);
    maleDuck = numel(maleDuck_idx);
    femaleDuck = numel(femaleDuck_idx);
    tTimer = toc(handles.start);
    set(handles.txtTimer, 'String', sprintf('Total Elapsed Time: %02d:%07.4f',floor(tTimer/60),rem(tTimer,60)));
    set(handles.txtCounter_Male,'String', sprintf('Male: %d', maleDuck));
    set(handles.txtCounter_Female,'String', sprintf('Female: %d', femaleDuck));
    set(handles.txtCounter_Total,'String', sprintf('Total Duck Eggs: %d', maleDuck + femaleDuck));
    set(handles.txtCounter_Queue,'String', sprintf('Eggs in Queue: %d', numel(eggQueue)));
    drawnow;
 end
set(handles.btnStart,'Enable', 'on');
set(handles.btnStop,'Enable', 'off');
   sReq = sprintf('DCOM_0000');
   fprintf(s,sReq);
   pause(1);
fclose(s);
delete(instrfindall);
imaqreset;
0 comentarios
Respuestas (0)
La pregunta está cerrada.
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!