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