From 48fe9a7fdcb9bd61a0dfcf26d4f295a177ddf646 Mon Sep 17 00:00:00 2001 From: Remi Gau Date: Fri, 17 Jul 2020 14:06:57 +0200 Subject: [PATCH 1/2] create function to wait for fMRI trigger --- demos/CPP_wait4TriggerDemo.m | 11 +++++++ pressSpace4me.m | 2 +- wait4Trigger.m | 61 ++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 demos/CPP_wait4TriggerDemo.m create mode 100644 wait4Trigger.m diff --git a/demos/CPP_wait4TriggerDemo.m b/demos/CPP_wait4TriggerDemo.m new file mode 100644 index 0000000..c3584ac --- /dev/null +++ b/demos/CPP_wait4TriggerDemo.m @@ -0,0 +1,11 @@ +cd .. + +cfg.device = 'Scanner'; + +cfg.numTriggers = 4; + +cfg.triggerKey = 'space'; + +KbName('UnifyKeyNames'); + +wait4Trigger(cfg) \ No newline at end of file diff --git a/pressSpace4me.m b/pressSpace4me.m index b39c39d..50194c2 100644 --- a/pressSpace4me.m +++ b/pressSpace4me.m @@ -11,7 +11,7 @@ responseKey = KbName(find(keyCode)); - if strcmp(responseKey,'space') + if strcmp(responseKey, 'space') fprintf('starting the experiment....\n'); break end diff --git a/wait4Trigger.m b/wait4Trigger.m new file mode 100644 index 0000000..30f5b48 --- /dev/null +++ b/wait4Trigger.m @@ -0,0 +1,61 @@ +function wait4Trigger(cfg) + +triggerCounter = 0; + +if strcmp(cfg.device, 'Scanner') + + msg = 'Waiting for trigger'; + talkToMe(cfg, msg) + + while triggerCounter < cfg.numTriggers + + keyCode = []; %#ok + + [~, keyCode] = KbPressWait(-1); + + if strcmp(KbName(keyCode), cfg.triggerKey) + + triggerCounter = triggerCounter + 1 ; + + msg = sprintf(' Trigger %i', triggerCounter); + talkToMe(cfg, msg) + + pauseBetweenTriggers(cfg) + + end + end +end +end + + +function talkToMe(cfg, msg) + +fprintf([msg , ' \n']); + +if isfield(cfg, 'win') + + DrawFormattedText(cfg.win, msg,... + 'center', 'center', cfg.textColor); + + Screen('Flip', cfg.win); + +end + +end + + +function pauseBetweenTriggers(cfg) +% we pause between triggers for half a repetition time or 500 ms if no RT +% is specified. +% we do this otherwise KbWait and KbPressWait might be too fast and could +% catch several triggers in one go. + +if isfield(cfg, 'repetitionTime') + waitTime = cgf.repetitionTime / 2; +else + waitTime = .5; +end + +WaitSecs(waitTime); + +end \ No newline at end of file From ffd2d4d742a2dc77466d77394768c90b05926ace Mon Sep 17 00:00:00 2001 From: Remi Gau Date: Fri, 17 Jul 2020 14:13:04 +0200 Subject: [PATCH 2/2] simplifiy pressSpaceMe --- pressSpace4me.m | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/pressSpace4me.m b/pressSpace4me.m index 50194c2..6cee744 100644 --- a/pressSpace4me.m +++ b/pressSpace4me.m @@ -1,7 +1,7 @@ function pressSpace4me % Use that to stop your script and only restart when the space bar is pressed. -fprintf('\npress space to continue\n'); +fprintf('\nPress space to continue.\n'); while 1 @@ -9,10 +9,8 @@ [~, keyCode, ~] = KbWait(-1); - responseKey = KbName(find(keyCode)); - - if strcmp(responseKey, 'space') - fprintf('starting the experiment....\n'); + if strcmp(KbName(find(keyCode)), 'space') + fprintf('starting the experiment...\n'); break end