ButtonBoxes
Revision as of 13:33, 28 April 2014 by Wiki-admin (talk | contribs)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
General
Hardware
TSG ButtonBox hardware
E-Prime "Serial Response Box"
Revisions
Revision 1
Revision 2
Revision 3
Presentation Settings
File:Buttonbox1.png |
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
=================================================================================================== 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
Inquisit Settings
Work in progress
E-Prime
Work in progress