2016-07-12 18 views
1

Innerhalb meines Matlab-Skripts möchte ich, dass der Benutzer 5 Sekunden hat, um eine Frage zu beantworten, indem er eine beliebige Maustaste für echten oder keinen Mausklick für false klickt. Wenn der Benutzer eine Maustaste klickt, wird das Skript fortgesetzt. Wenn 5 Sekunden ohne Mausklick verstrichen sind, wird das Skript ebenfalls fortgesetzt. Irgendeine Idee, wie man das macht?Matlab: warten Sie auf bestimmte Zeit für Mausklick, dann weiter

Ich versuchte [x,y,MouseClick]=ginput(1); innerhalb einer tictoc Schleife, und notieren Sie die MouseClick Variable aber das Skript pausiert am ginput bis etwas eingegeben wird, und es wartet dort für immer. Ich brauche es um nach 5 Sekunden weiterzugehen, wenn es keine Eingabe gibt.

Hier ist der Code:

for i=2:26 

    % display current letter 
    CurrentLetter=Data{i}{RowSelect}; 
    letter = text (0.3, 0.5, CurrentLetter, 'fontsize', 400, 'color', 'r'); 
    pause(0.5); 
    delete (letter); % blank screen 

    % allow 5 seconds to collect mouse click 
    tic; 
    MouseClick=0; 
    while (toc<=5); 
     pause(0.1); 
     [x,y,MouseClick]=ginput(1); 
     if MouseClick~=0 
      break; % stop loop if a mouse click has been pressed 
     end 
    end 
% add up the scores and write them to an xls file 
end 
+1

Wie werden Sie Benutzer mit der Frage aufgefordert werden? – excaza

+0

Bitte bearbeiten Sie Ihre Frage, um den Code einzufügen, den Sie verwenden, um das Fenster/die Figur/GUI zu generieren, in dem der Benutzer dazu aufgefordert wird. – Matt

Antwort

0

Sie waitforbuttonpress nennen kann für eine Eingabe warten - entweder ein Mausklick oder ein Tastendruck. Sie können auch vorher einen Timer registrieren, der ein Tastendruckereignis mit einer Verzögerung von 5 Sekunden simuliert. Anhand des von waitforbuttonpress zurückgegebenen Werts können Sie feststellen, ob der Benutzer auf eine Maustaste geklickt hat oder ob stattdessen ein Tastendruckereignis stattgefunden hat (entweder manuell vom Benutzer oder automatisch vom Zeitgeber ausgelöst).

figure(); 
t = timer('TimerFcn', 'java.awt.Robot().keyPress(java.awt.event.KeyEvent.VK_SPACE);', 'StartDelay', 5); 
start(t); 
k = waitforbuttonpress(); 
if k == 0 
    display('user made a mouse button click!'); 
else 
    display('5 seconds elapsed, or user pressed a button!'); 
end 
display('doing something...'); 
0

Sie könnten mit uiwait arbeiten und wieder auf: Ich nehme nur eine Taste mit einem Rückruf von Sorten haben.

Also bauen Sie die Schaltfläche und alles andere in der GUI und rufen Sie danach uiwait(gcf, 5).

In den Button Rückruf tun Sie, was immer Sie tun, wahrscheinlich irgendwo die Antwort anmelden, und am Ende rufen Sie uiresume(src.parent)