%%%%%%%%%%%%%%%%%%%%Antilock Brake Project%%%%%%%%%%%%%%%%%%%% % Kirk Fitzpattrick % % Version 1.0 % % % % This function creats a figure in Matlab that will accept % % formated serial data of the form [a;b] and plot the values % % with two different colors in the figure. There is A UI % % button that can freeze the display when paused and resume % % at the currtent point when the button is unpaused. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function serial_read_brakes() global serial_read_obj; serial_read_obj={}; serial_read_obj.port=5; serial_read_obj.plot_size=250; serial_read_obj.values=0; serial_read_obj.stream=serial(['COM' num2str(serial_read_obj.port)],... 'BaudRate',9600); fopen(serial_read_obj.stream); serial_read_obj.stream.Terminator='CR'; serial_read_obj.x=0:serial_read_obj.plot_size-1; %y=zeros(9,250); % Testing new stuff serial_read_obj.f=figure('CloseRequestFcn',@close_serial_read,... 'name','Accelerometer Scope',... 'numbertitle', 'off'); gcf; %f.Renderer='painters'; fgetl(serial_read_obj.stream); jacked=1; while(jacked) % Read in values to set size of data array. =) try stuff=fgetl(serial_read_obj.stream); serial_read_obj.values=eval(stuff); if (size(serial_read_obj.values)==[2,1]) jacked=0; end end end serial_read_obj.numvars=length(serial_read_obj.values); serial_read_obj.y=zeros(serial_read_obj.numvars,250); serial_read_obj.p=plot(serial_read_obj.x,serial_read_obj.y,'LineWidth',2); serial_read_obj.axes=gca; serial_read_obj.index=1; serial_read_obj.lastvals=zeros(serial_read_obj.numvars, 1); %ADDING GUI serial_read_obj.pause_button=uicontrol('Style','pushbutton',... 'String','Pause',... 'Units','normalized',... 'Position',[0.85 0.87 0.1 0.05],... 'Tag','PauseButton',... 'CallBack',@pause_button); serial_read_obj.paused=0; set(serial_read_obj.axes, 'Position',[0.1 0.11 0.7 0.815]); set(serial_read_obj.stream,'BytesAvailableFcn',@plot_refresh); function plot_refresh(src,evt) global serial_read_obj; stuff=fgetl(serial_read_obj.stream); try values=eval(stuff); if (size(values) ~= [2 1]) error(['The values aren''t right: ' values]); end if (abs(values(1)-serial_read_obj.lastvals(1)) > 50) disp(['newstuff: ' stuff]); end catch % errors are very common for some reason!!! -- No they're % not, just needed capacitors on digital line. disp(stuff); values=serial_read_obj.lastvals; end serial_read_obj.y(:,serial_read_obj.index)=values; if (~serial_read_obj.paused) for k=1:serial_read_obj.numvars set(serial_read_obj.p(k), 'ydata', serial_read_obj.y(k,[[serial_read_obj.index+1:end] [1:serial_read_obj.index]])); end end serial_read_obj.index=mod(serial_read_obj.index,serial_read_obj.plot_size)+1; serial_read_obj.lastvals=values; return %GUI STUFF function pause_button(src, evt) global serial_read_obj; if (serial_read_obj.paused) set(serial_read_obj.pause_button, 'String', 'Pause'); serial_read_obj.paused=0; else set(serial_read_obj.pause_button, 'String', 'Unpause'); serial_read_obj.paused=1; end return function close_serial_read(src,evt) global serial_read_obj; fclose(serial_read_obj.stream); delete(serial_read_obj.f); disp('Goodbye!'); return return