Skip to content

Commit 6069a96

Browse files
authored
Merge pull request #28 from Remi-Gau/remi-wait_for_trigger
add function to wait for fMRI trigger
2 parents 4b82002 + ffd2d4d commit 6069a96

File tree

3 files changed

+75
-5
lines changed

3 files changed

+75
-5
lines changed

demos/CPP_wait4TriggerDemo.m

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
cd ..
2+
3+
cfg.device = 'Scanner';
4+
5+
cfg.numTriggers = 4;
6+
7+
cfg.triggerKey = 'space';
8+
9+
KbName('UnifyKeyNames');
10+
11+
wait4Trigger(cfg)

pressSpace4me.m

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
function pressSpace4me
22
% Use that to stop your script and only restart when the space bar is pressed.
33

4-
fprintf('\npress space to continue\n');
4+
fprintf('\nPress space to continue.\n');
55

66
while 1
77

88
WaitSecs(0.1);
99

1010
[~, keyCode, ~] = KbWait(-1);
1111

12-
responseKey = KbName(find(keyCode));
13-
14-
if strcmp(responseKey,'space')
15-
fprintf('starting the experiment....\n');
12+
if strcmp(KbName(find(keyCode)), 'space')
13+
fprintf('starting the experiment...\n');
1614
break
1715
end
1816

wait4Trigger.m

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
function wait4Trigger(cfg)
2+
3+
triggerCounter = 0;
4+
5+
if strcmp(cfg.device, 'Scanner')
6+
7+
msg = 'Waiting for trigger';
8+
talkToMe(cfg, msg)
9+
10+
while triggerCounter < cfg.numTriggers
11+
12+
keyCode = []; %#ok<NASGU>
13+
14+
[~, keyCode] = KbPressWait(-1);
15+
16+
if strcmp(KbName(keyCode), cfg.triggerKey)
17+
18+
triggerCounter = triggerCounter + 1 ;
19+
20+
msg = sprintf(' Trigger %i', triggerCounter);
21+
talkToMe(cfg, msg)
22+
23+
pauseBetweenTriggers(cfg)
24+
25+
end
26+
end
27+
end
28+
end
29+
30+
31+
function talkToMe(cfg, msg)
32+
33+
fprintf([msg , ' \n']);
34+
35+
if isfield(cfg, 'win')
36+
37+
DrawFormattedText(cfg.win, msg,...
38+
'center', 'center', cfg.textColor);
39+
40+
Screen('Flip', cfg.win);
41+
42+
end
43+
44+
end
45+
46+
47+
function pauseBetweenTriggers(cfg)
48+
% we pause between triggers for half a repetition time or 500 ms if no RT
49+
% is specified.
50+
% we do this otherwise KbWait and KbPressWait might be too fast and could
51+
% catch several triggers in one go.
52+
53+
if isfield(cfg, 'repetitionTime')
54+
waitTime = cgf.repetitionTime / 2;
55+
else
56+
waitTime = .5;
57+
end
58+
59+
WaitSecs(waitTime);
60+
61+
end

0 commit comments

Comments
 (0)