How to put a timeout to ginput?
I want to show user a figure, and ask them to click somewhere within a stipulated time limit, like 2 seconds.
I am using ginput as follows, but it seems to be pausing the execution before a button is pressed. I went to check in the ginput function and indeed it was using waitforbuttonpress. I tried some hands in getting a workaround but wasn’t much succesfull to interrup ginput (specifically it’s wfbp function).
I am attaching a sample code what i need.
I am okay in getting to know some work-arounds, even if they don’t use ginput, but i’d still love to know what exactly could ba a solution if I were to use ginput.
x = linspace(0,4*pi,2000);
y=sin(x);
plot(x,y);
timeout=2;
tic;
[xt,yt]=ginput(1);
if toc>2
xt=NaN;
yt=NaN;
end
NOTE:-
Matlabsolutions.com provide latest MatLab Homework Help,MatLab Assignment Help , Finance Assignment Help for students, engineers and researchers in Multiple Branches like ECE, EEE, CSE, Mechanical, Civil with 100% output.Matlab Code for B.E, B.Tech,M.E,M.Tech, Ph.D. Scholars with 100% privacy guaranteed. Get MATLAB projects with source code for your learning and research.
I understand that your goal is to show a figure and ask the user to click somewhere within a stipulated time limit (e.g., 2 seconds). The following approach would enable you achieve this:
- Plot the Figure: Plot the figure you wish to show the customer.
- Initialize Coordinates: Initialize “xt” and “yt” to “NaN”.
- Create Click Flag: Create a flag “clicked” to check if the user has clicked.
- Create Timer: Create a timer object “t” with a “StartDelay” of “timeout” seconds. Set the “TimerFcn” to “uiresume(gcbf)”, which resumes the figure’s execution when the timer elapses.
- Start Timer: Start the timer with “start(t)”.
- Set Mouse Click Callback: Set the “WindowButtonDownFcn” to “mouseClickFcn”, which sets the “clicked” flag to “true” and resumes the figure’s execution when the user clicks.
- Wait for User Input or Timeout: Use the “uiwait(gcf, timeout)” function to wait for the figure to be resumed by either the timer or the mouse click.
- Clean Up Timer: Stop and delete the timer object with “stop(t)” and “delete(t)”.
- Check Click Flag: Check if the “clicked” flag is “true” to determine if the user clicked within the timeout period.
- Display Coordinates: Print the clicked coordinates to the console.
Here is an example:
timed_example();
function timed_example()
x = linspace(0, 4*pi, 2000);
y = sin(x);
plot(x, y); timeout = 2;
[xt, yt] = deal(NaN); % Initialize the coordinates % Create a flag to check if the user has clicked
clicked = false; % Create a timer object to interrupt the execution after the timeout
t = timer('StartDelay', timeout, 'TimerFcn', @(~,~) uiresume(gcbf));
start(t); % Set the WindowButtonDownFcn to capture the click and resume the figure
set(gcf, 'WindowButtonDownFcn', @mouseClickFcn);
SEE COMPLETE ANSWER CLICK THE LINK
https://www.matlabsolutions.com/resources/how-to-put-a-timeout-to-ginput-.php
https://matlabarticlesworld.blogspot.com/2024/06/how-to-put-timeout-to-ginput.html