2012-12-10 3 views
1

J'ai un simple type de code GUI ci-dessous. Cette fonction "test_keypress" crée une figure, et elle répond à la pression de la touche (espace).Accepter une seule pression sur une touche pendant un certain temps dans Matlab

Maintenant, je veux ajouter une contrainte pour que Matlab n'accepte qu'une seule touche pendant un certain temps (disons, 1 seconde). En d'autres termes, je souhaite rejeter une pression sur une touche si cela se produit dans les 1 s qui suivent la frappe précédente.

Comment puis-je faire cela?

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 

Répondre

3

Vous pouvez stocker l'heure actuelle, et seulement évaluer la commande imshow si la pression de touche se produit au moins 100 secondes après le dernier.

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 
Questions connexes