+xHi there,
I want to display an error message when the mouse movement stops for 200ms in a trial (see for what I tried below which does not work yet). I also want to add a /timeout for 4000ms. Is there a way to specify both within one trial? Thanks for all suggestions, I appreciate it.
<trial ydecrease>
/ ontrialbegin = [
values.errortype = 2
values.starttime = script.elapsedtime;
]
/ inputdevice = mouse
/ stimulusframes = [1 = clearscreen, left, right, stim_left, default_stim_right]
/ timeout = 200
/ validresponse = (mousemove,noresponse)
/ responsetrial = ("noresponse", trial.error) // if there is no mouse movement for 200ms show error message
/ ontrialend = [
values.mouse_change = abs(values.mouse_y - trial.ydecrease.responsey);
]
/ branch = [
if (expressions.ismouseinrectangle) {
return trial.clickresponse;
values.mouse_y = trial.ydecrease.responsey;
} else if (trial.ydecrease.responsey <= values.mouse_y) {
values.mouse_y = trial.ydecrease.responsey;
return trial.ydecrease;
} else if (trial.ydecrease.responsey > values.mouse_y) {
values.changedirection += 1;
values.errortype = 1;
return trial.error;}
]
/recorddata = true
</trial>
<trial error>
/ inputdevice = mouse
/ ontrialbegin = [
values.starttime = script.elapsedtime;
if(values.errortype == 1)
trial.error.insertstimulustime(text.error_moved_down, 0)
else if(values.errortype == 2)
trial.error.insertstimulustime(text.error_movement_stopped, 0)
else if(values.errortype == 3)
trial.error.insertstimulustime(text.error_no_click, 0)
]
/ stimulusframes = [1 = clearscreen]
/ validresponse = (0)
/ timeout = 1000
/ branch = [
values.mouse_y = trial.error.responsey;
values.finalresponse = "aborted";
trial.pressstart
]
/ recorddata = true
</trial>
<text error_moved_down>
/ items = ("Mouse moved down!")
/ position = (50%, 50%)
/ fontstyle = ("Arial", 5%, true, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = red
/ erase = ""
</text>
<text error_movement_stopped>
/ items = ("Mouse movement stopped!")
/ position = (50%, 50%)
/ fontstyle = ("Arial", 5%, true, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = red
/ erase = ""
</text>
<text error_no_click>
/ items = ("Response too slow!")
/ position = (50%, 50%)
/ fontstyle = ("Arial", 5%, true, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = red
/ erase = ""
</text>
You'll want to do something like this:
<values>
/ starttime = 0
/ mouse_y = 0
/ errortype = 0
/ mouse_change = 0
/ finalresponse = ""
/ changedirection = 0
/ timeremaining = 0
/ trialcount = 0
</values>
<expressions>
/ set_timeout = if (values.timeremaining >= 200) {
200;
} else {
values.timeremaining;
};
/ ismouseinrectangle = ((trial.ydecrease.responsey <= shape.left.bottom)
&& (trial.ydecrease.responsey >= shape.left.top)
&& (trial.ydecrease.responsex <= shape.left.right)
&& (trial.ydecrease.responsex >= shape.left.left)
|| (trial.ydecrease.responsey <= shape.right.bottom)
&& (trial.ydecrease.responsey >= shape.right.top)
&& (trial.ydecrease.responsex <= shape.right.right)
&& (trial.ydecrease.responsex >= shape.right.left));
</expressions>
<block example>
/ trials = [1-2 = pressstart]
</block>
<trial pressstart>
/ ontrialbegin = [
values.trialcount = 0;
values.timeremaining = 4000;
]
/ ontrialend = [
values.mouse_y = trial.pressstart.responsey;
]
/ stimulusframes = [1=clearscreen, mytext]
/ validresponse = (lbuttondown)
/ inputdevice = mouse
/ branch = [
trial.ydecrease;
]
</trial>
<trial ydecrease>
/ ontrialbegin = [
values.trialcount += 1;
values.errortype = 0;
values.starttime = script.elapsedtime;
]
/ inputdevice = mouse
/ stimulusframes = [1 = clearscreen, mytext, left, right]
/ timeout = expressions.set_timeout
/ validresponse = (mousemove,noresponse)
/ ontrialend = [
values.mouse_change = abs(values.mouse_y - trial.ydecrease.responsey);
values.timeremaining -= trial.ydecrease.elapsedtime;
]
/ branch = [
if (expressions.ismouseinrectangle) {
return trial.clickresponse;
values.mouse_y = trial.ydecrease.responsey;
} else if (trial.ydecrease.responsey <= values.mouse_y && values.timeremaining > 0 && trial.ydecrease.response != 0) {
values.mouse_y = trial.ydecrease.responsey;
return trial.ydecrease;
} else if (trial.ydecrease.responsey > values.mouse_y) {
values.changedirection += 1;
values.errortype = 1;
return trial.error;
} else if (trial.ydecrease.response == 0 && values.timeremaining > 0) {
values.errortype = 2;
return trial.error;
} else if (trial.ydecrease.response == 0 && values.timeremaining <= 0) {
values.errortype = 4;
return trial.error;
};
]
/recorddata = true
</trial>
<trial error>
/ inputdevice = mouse
/ ontrialbegin = [
trial.error.resetstimulusframes();
values.starttime = script.elapsedtime;
if(values.errortype == 1)
trial.error.insertstimulustime(text.error_moved_down, 0)
else if(values.errortype == 2)
trial.error.insertstimulustime(text.error_movement_stopped, 0)
else if(values.errortype == 3)
trial.error.insertstimulustime(text.error_no_click, 0)
else if(values.errortype == 4)
trial.error.insertstimulustime(text.error_timed_out, 0)
]
/ stimulusframes = [1 = clearscreen]
/ validresponse = (0)
/ timeout = 1000
/ branch = [
values.mouse_y = trial.error.responsey;
values.finalresponse = "aborted";
trial.pressstart;
]
/ recorddata = true
</trial>
<text error_moved_down>
/ items = ("Mouse moved down!")
/ position = (50%, 50%)
/ fontstyle = ("Arial", 5%, true, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = red
/ erase = ""
</text>
<text error_movement_stopped>
/ items = ("Mouse movement stopped!")
/ position = (50%, 50%)
/ fontstyle = ("Arial", 5%, true, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = red
/ erase = ""
</text>
<text error_no_click>
/ items = ("Response too slow!")
/ position = (50%, 50%)
/ fontstyle = ("Arial", 5%, true, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = red
/ erase = ""
</text>
<text error_timed_out>
/ items = ("Timed out!")
/ position = (50%, 50%)
/ fontstyle = ("Arial", 5%, true, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = red
/ erase = ""
</text>
<trial clickresponse>
/ stimulusframes = [1=clearscreen, mytext]
/ validresponse = (lbuttondown)
/ inputdevice = mouse
</trial>
<text mytext>
/ items = ("<%script.currenttrial%>|<%expressions.set_timeout%>|<%values.timeremaining%>")
/ erase = false
</text>
<shape left>
/ shape = rectangle
/ color = blue
/ size = (4%, 3%)
/ position = (5%, 5%)
/ erase = false
</shape>
<shape right>
/ shape = rectangle
/ color = red
/ size = (4%, 3%)
/ position = (95%, 5%)
/ erase = false
</shape>