Title: Matlab Class 7 Hristiyan Kourtev
1Matlab Class 7Hristiyan Kourtev Xiaotao Su,
Ph.D.Visual Psychophysicist IT Group
LeaderRutgers Center for Cognitive Science
(RuCCS)
2Accurate Timing
- GetSecs is a psychtoolbox function that provides
highly accurate timing. - It returns the number of seconds since the
machine has started up - To test precision on your machine,
typeGetSecsTick
Command Window
a GetSecs GetSecs a GetSecs a GetSecs
a GetSecs a
3KbCheck
- KbCheck is used to check if a key is being
pressed and to find out what key is being
pressed. - Returns three values
- key_press, secs, key_codeKbCheck
4KbCheck
- KbCheck is used to check if a key is being
pressed and to find out what key is being
pressed. - Returns three values
- key_press, secs, key_codeKbCheck
Vector representing all of the input keys.
Elements in the vector are set to 1 if pressed or
0 if not
Time that this test took place (This is from
GetSecs function)
1 or 0 depending on if there was a key press
5Speed Test Game
disp('NOW!') timer GetSecs while
1 key_is_down, secs, key_code
KbCheck if(key_is_down)
break end end elapsed_time secs
- timer disp('Your time was ',
num2str(elapsed_time)) end
- speed_test.m
- tests your reaction time
- WaitSecs(1)
- disp('Ready?')
- num_sec_to_start rand51
- WaitSecs(num_sec_to_start)
- too_soon 0
- timer GetSecs
- while ((GetSecs-timer)ltnum_sec_to_start) ...
- (too_soon)
- too_soon, secs, keyCode KbCheck
- if(too_soon)
- break
- end
- end
- if(too_soon)
- disp('you pressed the key too early')
- else
-
6Task 1
- Make it so if someone presses a key too early,
the program give a message and exits.
(Tipfirst remove WaitSecs
- key_press, secs, key_codeKbCheck
Vector representing all of the input keys.
Elements in the vector are set to 1 if pressed or
0 if not
Time that this test took place (This is from
GetSecs function)
1 or 0 depending on if there was a key press
7Speed Test Game
disp('NOW!') timer GetSecs while
1 key_is_down, secs, key_code
KbCheck if(key_is_down)
break end end elapsed_time secs
- timer disp('Your time was ',
num2str(elapsed_time)) end
- speed_test.m
- tests your reaction time
- WaitSecs(1)
- disp('Ready?')
- num_sec_to_start rand51
- WaitSecs(num_sec_to_start)
- too_soon 0
- timer GetSecs
- while ((GetSecs-timer)ltnum_sec_to_start) ...
- (too_soon)
- too_soon, secs, keyCode KbCheck
- if(too_soon)
- break
- end
- end
- if(too_soon)
- disp('you pressed the key too early')
- else
-
8What key was pressed?
- The third returned value is a vector representing
all the keys with 1s for pressed keys and zeros
for keys that arent pressed - To find the value of the key, use
- key_name KbName(key_code)
- This will return a string corresponding to that
key_code
9Simple program to find key mapping names
- get_key_name.m
- find out what the name of the key is
-
- WaitSecs(1)
- KbWait
- key_is_down, secs, key_code KbCheck
- name KbName(key_code)
- disp(name)
10KbName works the other way around as well
- As you have seen
- key_name KbName(key_code)
- You can also do the following
- return_key KbName(return)
- esc_key KbName(esc)
- up_key KbName(up)
- And this will get you the index of the element in
the key_code vector that corresponds to that key
11key_code vector when esc is pressed
escs key code is 27
key_code vector
0 0 . 0 0 1 0 0 ..
(1) (2) . (25) (26) (27) (28) (29) .
Values
Indexes
So, key_code(27) is 1
12Exit on esc
- exit_on_esc.m
-
- esc_key KbName('esc')
- i 0
- while 1
- i i1
- key_is_down, secs, key_code KbCheck
- if(key_code(esc_key))
- break
- end
- end
- disp('Good Bye')
-
13Moving Dot
moving_dot.m clear all screen_setup up_key
KbName('up') down_key KbName('down') left_key
KbName('left') right_key KbName('right') esc
_key KbName('esc') shape 20, 20, 100,
100 color 255, 0, 255 tic
while toclt10 Screen(window, FillOval',
color, shape) flip key_is_down,
secs, key_code KbCheck
if(key_code(esc_key)) break
end end clear screen
14Task 2
- Draw a circle
- Make it so the arrow keys will move the circle
- Make sure the circle cannot go outside of the
boundaries of the screen.
15Task 3 - color differentiation (part 1)
- Take subject name
- screen_setup
- trial loop (start with 5)color rand255,
rand255, rand255 - put circles 1-4 on the screen
- one of the four circles will be slightly off
(start with /-50), color from the others on one
of the three color dimensions (randomly chose
dimension) careful that your deviation doesnt
go gt255 or lt0 - The subject will click on the circle they feel is
different - record data (whatever would be useful)
- if the subject was right in the last loop, the
amount the color is off is cut in half,
otherwise, increase by half - save trial data to csv
tip make a function to determine if the cursor
is in a shape function is_in in_shape(vect,
mouse_x, mouse_y)
16Task 3 - color differentiation (part 2)
- Further additions
- allow the subject to press 1 - 4 to select a
circle (using KbCheck) - put numbers in the circles
- Hint You need to use the following commands
- Screen('TextFont', window, fontName)Screen('Tex
tSize', window, fontSize) - Screen('DrawText', window, textString, x, y,
textColor)fontName can be Arial, Verdana
or other - fontSize can be any number. Start with around 20
and adjust as needed
17Deploying Matlab Programs on other machines
- The Matlab Builder/Deploytool deploytool
- The Matlab Component Runtime (MCR)
- Creating a standalone version of a Matlab program
(Windows) - Creating a standalone version of a Matlab program
(OSX) - The .NET Builder and deploying to the web