|
|
| 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 == |
General
Hardware
E-Prime "Serial Response Box"
Revisions
Revision 1
Revision 3
Revision 4
Presentation Settings
Psychopy Settings
#!/usr/bin/env python
from psychopy import core, visual, event from rusocsci import buttonbox import logging, time
##Setup Section
#logging.getLogger().setLevel(logging.DEBUG) # use this for debug info
win = visual.Window([400,300], monitor="testMonitor") bb = buttonbox.Buttonbox()
##Experiment Section
b = bb.waitButtons(maxWait = 10.0, buttonList=['A']) print("b: {}".format(b))
##Cleanup Section
core.quit() The following script lights the LEDs under the buttons pressed.
#!/usr/bin/env python
#from __future__ import print_function
import logging, time, sys from rusocsci import buttonbox
##Setup Section
led = [False]*8
##Experiment Section
bb = buttonbox.Buttonbox() while True:
buttons = bb.getButtons()
if len(buttons):
for c in buttons:
if ord(c) >= ord('a') and ord(c) < ord('a')+8:
led[ord(c) - ord('a')] = False
elif ord(c) >= ord('A') and ord(c) < ord('A')+8:
led[ord(c) - ord('A')] = True
bb.setLeds(led)
#print("buttons ({:3d}): {}{}".format(len(buttons), buttons, " "*50), end="\r")
#sys.stdout.flush()
Matlab Settings
Inquisit Settings
E-Prime