Changes

Jump to navigation Jump to search
2,932 bytes removed ,  10:24, 24 March 2014
no edit summary
Line 68: Line 68:     
== Matlab Settings ==
 
== Matlab Settings ==
  −
<nowiki>
  −
===================================================================================================
  −
function handle = serial_buttonbox_common(cmd,varargin)
  −
% to initialize connection:
  −
% handle = serial_buttonbox('open',se)
  −
%    settings (se):
  −
%      define settings as a structure, i.e.:
  −
%      se.Device    = 'COM1';
  −
%      se.BaudRate  = 115200;
  −
%      se.DataBits  = 8;
  −
%      se.StopBits  = 1;
  −
%      se.Parity    = 0;
  −
%      se.PTBPath  = 'c:\MyToolboxes\PsychToolbox'
  −
%
  −
% to close the connection:
  −
% serial_buttonbox('close',handle);
  −
  −
persistent old_hdl
  −
  −
% set defaults
  −
se.Device    = 'COM1';
  −
se.BaudRate  = 115200;
  −
se.DataBits  = 8;
  −
se.StopBits  = 1;
  −
se.Parity    = 0;
  −
se.PTBPath  = 'c:\Pgrogram Files\PsychToolbox';
  −
  −
if nargin < 1
  −
  cmd = 'open';
  −
end
  −
if nargin > 1
  −
  % user overwrites default settings
  −
  flds = fields(varargin{1});
  −
  for n = 1 : numel(flds)
  −
      se.(flds{n}) = varargin{1}.(flds{n});
  −
  end
  −
end
  −
  −
  −
switch cmd
  −
  case 'open'
  −
      addpath(genpath(se.PTBPath));
  −
      % get handle to serial device
  −
      handle = open_buttonbox(se.Device);
  −
      return
  −
  case 'close'
  −
      handle = varargin{1};
  −
      IOPort('close',handle);
  −
      return
  −
  case 'run'
  −
      % read incoming data
  −
      if isempty(old_hdl)
  −
        help serial_buttonbox_common
  −
        error('Buttonbox not yet initialized');
  −
      end
  −
      handle = old_hdl;
  −
  otherwise
  −
      fprintf('Unknown option %s\n',cmd);
  −
      return
  −
end
  −
  −
% only gets here when cmd = 'run'
  −
while 1 
  −
  % start polling for characters (indicating start of scan)
  −
  navailable = IOPort('BytesAvailable', handle);
  −
  if navailable
  −
      data = [];
  −
      while navailable
  −
        % read incoming data
  −
        [newdata, ~, err] = IOPort('Read', handle, 0, navailable);
  −
        if ~isempty(err), disp(err); end
  −
        data = [data newdata];
  −
        %pause(0.001); % if possible just add a small pause to not claim entire core
  −
        navailable = IOPort('BytesAvailable', handle);
  −
      end
  −
      if numel(data)>1
  −
        fprintf('\nReceived characters: %d\n',numel(data));
  −
      end
  −
      for n = 1 : numel(data)
  −
%        disp(char(data(n)));
  −
        fprintf('incoming: %d\t%s\n',data(n),char(data(n)));
  −
      end
  −
  end
  −
 
  −
 
  −
end %while 1
  −
  −
  function hdl = open_buttonbox(device)
  −
      % open handle to serial device (mini buttonbox)
  −
      try
  −
        hdl = IOPort('OpenSerialPort',device,['BaudRate=' num2str(se.BaudRate)]);
  −
      catch
  −
        if ~isempty(old_hdl)
  −
            IOPort('close',old_hdl);
  −
        end
  −
        hdl = IOPort('OpenSerialPort',device,['BaudRate=' num2str(se.BaudRate)]);
  −
      end
  −
      old_hdl = hdl;
  −
     
  −
      fprintf('Wait for device buttonbox....\n');
  −
      tic
  −
      while ~IOPort('BytesAvailable', hdl) && toc<10
  −
        % wait for welcome message device
  −
      end
  −
      pause(0.5);
  −
  −
      % clear buffer
  −
      %IOPort('flush', hdl);
  −
      IOPort('purge', hdl);
  −
  end
  −
  −
end
  −
</nowiki>
      
== Inquisit Settings ==
 
== Inquisit Settings ==
    
== E-Prime ==
 
== E-Prime ==
Anonymous user

Navigation menu