How do I make all the code execute in MATLAB using Psychtoolbox?

5 Ansichten (letzte 30 Tage)
Cai Chin
Cai Chin am 19 Aug. 2020
Kommentiert: Geoff Hayes am 20 Aug. 2020
I am using MATLAB 2020 Psychtoolbox on Mac OS and everytime I run this code, they screen turns grey followed by an error sound, however, no error message is displayed in the command window. How do I make all the code execute?
% Clear the workspace
close all;
clearvars;
sca;
% Setup PTB with some default values
PsychDefaultSetup(2);
% Seed the random number generator. Here we use the an older way to be
% compatible with older systems. Newer syntax would be rng('shuffle'). Look
% at the help function of rand "help rand" for more information
rand('seed', sum(100 * clock));
% Set the screen number to the external secondary monitor if there is one
% connected
screenNumber = max(Screen('Screens'));
% Define white, grey and black
white = WhiteIndex(screenNumber);
grey = white / 2;
black = BlackIndex(screenNumber);
% Open an on screen window
[window, windowRect] = PsychImaging('OpenWindow', screenNumber, grey);
% Get the size of the on screen window
[screenXpixels, screenYpixels] = Screen('WindowSize', window);
% Query the frame duration
ifi = Screen('GetFlipInterval', window);
% Set up alpha-blending for smooth (anti-aliased) lines
Screen('BlendFunction', window, 'GL_SRC_ALPHA', 'GL_ONE_MINUS_SRC_ALPHA');
% Setup the text type for the window
Screen('TextFont', window, 'Ariel');
Screen('TextSize', window, 36);
% Get the centre coordinate of the window
[xCenter, yCenter] = RectCenter(windowRect);
%----------------------------------------------------------------------
% Keyboard information
%----------------------------------------------------------------------
% Define the keyboard keys that are listened for. We will be using the left
% and right arrow keys as response keys for the task and the escape key as
% a exit/reset key
escapeKey = KbName('ESCAPE');
leftKey = KbName('LeftArrow');
rightKey = KbName('RightArrow');
downKey = KbName('DownArrow');
%----------------------------------------------------------------------
% Fixation cross
%----------------------------------------------------------------------
% Here we set the size of the arms of our fixation cross
fixCrossDimPix = 10;
% Now we set the coordinates (these are all relative to zero we will let
% the drawing routine center the cross in the center of our monitor for us)
xCoords = [-fixCrossDimPix fixCrossDimPix 0 0];
yCoords = [0 0 -fixCrossDimPix fixCrossDimPix];
allCoords = [xCoords; yCoords];
% Set the line width for our fixation cross
lineWidthPix = 4;
%----------------------------------------------------------------------
% Colors
%----------------------------------------------------------------------
% We are going to use three colors for this demo. Red, Green and blue.
wordList = {'Green', 'Magenta', 'Orange'};
Colors = [0 1 0; 1 0 1; 0.8500 0.3250 0.0980];
%----------------------------------------------------------------------
% Define positions of sequences
%----------------------------------------------------------------------
leftX = screenXpixels/2.5;
leftY = screenXpixels/1.6;
rightX = screenXpixels/1.7;
rightY = screenYpixels/1.6;
upX = screenXpixels/2.1;
upY = screenYpixels/2.6;
left = [leftX leftY];
right = [rightX rightY];
up = [upX upY];
%----------------------------------------------------------------------
% Randomise temporal order of trials
%----------------------------------------------------------------------
trialorder = [1 0 0 0 0];
randtemp = Shuffle(trialorder);
%----------------------------------------------------------------------
% Trial loop
%----------------------------------------------------------------------
nTrials = 5;
for trial = 1:randtemp
% randomise position of sequences
randpos = Shuffle(left, right, up);
% fixation cross
% Draw the fixation cross in white, set it to the center of our screen and
% set good quality antialiasing
Screen('DrawLines', window, allCoords,...
lineWidthPix, white, [xCenter yCenter], 2);
% Derive distributions
seq1 = distribution(0.02, 0.126, 0.146, 0.106, 5); % high variance
seq2 = distribution(0.02, 0.126, 0.146, 0.106, 5); % low variance
seq3 = distribution(0.02, 0.126, 0.146, 0.106, 5); % low variance
seq4 = distribution(0.02, 0.126, 0.146, 0.106, 5);
seq5 = distribution(0.02, 0.126, 0.146, 0.106, 5);
seq6 = distribution(0.02, 0.126, 0.146, 0.106, 5);
seq7 = distribution(0.02, 0.126, 0.146, 0.106, 5);
seq8 = distribution(0.02, 0.126, 0.146, 0.106, 5);
seq9 = distribution(0.02, 0.126, 0.146, 0.106, 5);
seq10 = distribution(0.02, 0.126, 0.146, 0.106, 5);
seq11 = distribution(0.02, 0.126, 0.146, 0.106, 5);
seq12 = distribution(0.02, 0.126, 0.146, 0.106, 5);
seq13 = distribution(0.02, 0.126, 0.146, 0.106, 5);
seq14 = distribution(0.02, 0.126, 0.146, 0.106, 5);
seq15 = distribution(0.02, 0.126, 0.146, 0.106, 5);
if trial == 1
DrawFormattedText(window, 'Name the color \n\n Press Any Key To Begin',...
'center', 'center', black);
Screen('Flip', window);
KbStrokeWait;
end
if randtemp() == 0
% trail 1
Screen('DrawText', num2str(seq1), white, randpos(1));
Screen('DrawText', num2str(seq2), white, randpos(2));
Screen('DrawText', num2str(seq3), white, randpos(3));
WaitSecs(0.75)
Screen('Flip', window);
KbStrokeWait;
Screen('DrawText', num2str(seq2), white, randpos(1));
Screen('DrawText', num2str(seq3), white, randpos(2));
WaitSecs(0.75)
Screen('Flip', window);
KbStrokeWait;
%trial 2
%repeat
else
Screen('DrawText', num2str(seq13), white, randpos(1));
Screen('DrawText', num2str(seq14), white, randpos(2));
Screen('DrawText', num2str(seq15), white, randpos(3));
WaitSecs(0.75)
Screen('Flip', window);
KbStrokeWait;
Screen('DrawText', num2str(seq13), white, randpos(1));
Screen('DrawText', num2str(seq14), white, randpos(2));
WaitSecs(0.75)
Screen('Flip', window);
KbStrokeWait;
end
end
% Flip to the screen
Screen('Flip', window);
% Wait for a key press
KbStrokeWait;
% Clear the screen
sca;
function distribution(va, mu, ul, ll, nvals)
multiplier=10;
x = mu + randi(multiplier*nvals,1)*sqrt(va); % Generate sufficient random numbers
idx = (ll <= x) & (x <= ul); % Extract the value in the given range [min max]
while sum(idx)<nvals
multiplier=multiplier+1;
x = mu + randi(multiplier*nvals,1)*sqrt(va); % Generate sufficient random numbers
idx = (ll <= x) & (x <= ul); % Extract the value in the given range [min max]
end
x = x(idx);
x = x(1:nvals); % Extract numbers
  1 Kommentar
Geoff Hayes
Geoff Hayes am 20 Aug. 2020
Ren - you may need to use the MATLAB debugger to step through the code to see what is evaluated and what line (possibly) throws an error.

Melden Sie sich an, um zu kommentieren.

Antworten (0)

Produkte


Version

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by