Changes

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

Navigation menu