psychopy.org | Reference | Downloads | Github

2 digit response


#1

Hello. I’m trying to create an experiment where participants respond by typing a 1 or 2 digit response, and then press ‘return’ to advance.

I cannot figure out how to create this in the builder. If I select ‘force end of routine’ then I can only respond with 1 keypress. But if I do not, then I cannot advance to the next question.

I have tried to write a stop condition, but I cannot figure out the syntax. For example, I tried $keys[-1]==‘return’, but the error message says that ‘keys’ is not defined.

Any help is appreciated. Thanks.


#2

That is almost valid, but keys is an attribute of the keyboard component rather than being a stand-alone variable, so you need to add its name, like this:

your_keyboard_component_name.keys[-1] == 'return'

However, all that will do is stop the keyboard component from running: it won’t end the trial. So you should instead put that code in a code component rather than in the keyboard component, as that way you can add a line or two. e.g. put something like this in the Each frame tab of a code component so that it runs on every screen refresh:

if your_keyboard_component_name.keys[-1] == 'return':
    continueRoutine = False

You could also concatenate the keypresses into a single string rather than a list, and drop the final 'return', and store that in the data file to make your analysis easier:

if your_keyboard_component_name.keys[-1] == 'return':
    thisExp.addData('response', ''.join(your_keyboard_component_name.keys[0:-1]))
    continueRoutine = False

so ['1', '2', 'return'] would become '12'