Search code examples
matlabeventsuser-interfacekeypressfigure

Accept only one keypress for a certain period of time in Matlab


I have a simple, sort of GUI code shown below. This "test_keypress" function creates a figure, and it responses to the keypress (space).

Now, I want to add a constraint so that Matlab accepts only one keypress for a certain period of time (say, 1 second). In other words, I want to reject a keypress if it happens within 1 sec after the previous keypress occurred.

How can I do that?

function test_keypress

f = figure;
set(f,'KeyPressFcn',@figInput);
imshow(ones(200,200,3));

end


function figInput(src,evnt)

if strcmp(evnt.Key,'space')
    imshow(rand(200,200,3));
end

end

Solution

  • You can store the current time, and only evaluate the imshow command if the key-press occurs at least 100 seconds after the last one.

    function test_keypress
    
    f = figure;
    set(f,'KeyPressFcn',@figInput);
    imshow(ones(200,200,3));
    
    %# initialize time to "now"
    set(f,'userData',clock);
    
    end
    
    
    function figInput(src,evnt)
    
    currentTime = clock;
    %# get last time
    lastTime = get(src,'UserData');
    
    %# show new figure if the right key has been pressed and at least
    %# 100 seconds have elapsed
    if strcmp(evnt.Key,'space') && etime(lastTime,currentTime) > 100
        imshow(rand(200,200,3));
        %# also update time
        set(src,'UserData',currentTime)
    end
    
    end