How to interpret the reading of seconds in matlab?

1 view (last 30 days)
Hello , i am a lil bit confused. I did an experiment and now i am trying to read the time in seconds. MY experiment was pretty long . I needed to know the time spent by subjects in particular instances.
For example: From the start of a particular instance and the end , i am having this :
start: 3.026100e+01
.
.
.
Stop: 5.975300e+01
I spent at least 15 -20 min here. When substracting , it does not make sense. I have attached an excel file
how can i calculate the total time in seconds from the first row (1 )- to the (153) for example
function varargout = franck_guide(varargin)
% FRANCK_GUIDE MATLAB code for franck_guide.fig
% FRANCK_GUIDE, by itself, creates a new FRANCK_GUIDE or raises the existing
% singleton*.
%
% H = FRANCK_GUIDE returns the handle to a new FRANCK_GUIDE or the handle to
% the existing singleton*.
%
% FRANCK_GUIDE('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in FRANCK_GUIDE.M with the given input arguments.
%
% FRANCK_GUIDE('Property','Value',...) creates a new FRANCK_GUIDE or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before franck_guide_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to franck_guide_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help franck_guide
% Last Modified by GUIDE v2.5 22-Feb-2022 13:54:14
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @franck_guide_OpeningFcn, ...
'gui_OutputFcn', @franck_guide_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before franck_guide is made visible.
function franck_guide_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to franck_guide (see VARARGIN)
% Choose default command line output for franck_guide
handles.output = hObject;
% Plot patch on uiaxes
%hold on
% Read experiment data from a CSV file
[~,~,data] = xlsread('excel_data_final.xlsx');
data(1,:) = []; % remove the header line
% randomly permute the rows of data without repeating the value:
data = data(randperm(size(data,1)),:);
numeric_data = cell2mat(data(:,[1 2 3 4 6]));
handles.v_thickness_1 = numeric_data(:,1); % numeric
handles.v_thickness_2 = numeric_data(:,2);
handles.h_thickness_1 = numeric_data(:,3);
handles.h_thickness_2 = numeric_data(:,4);
handles.amplitude = data(:,5); % cell array of char vectors
handles.v_or_h_array = numeric_data(:,5);
handles.f_df = data(:,7);
handles.exp_counter = 1;
set(handles.text_exp_counter,'String',num2str(handles.exp_counter));
handles.region1 = [];
% Create the Arduino serial object
handles.arduinoObj = serialport('COM3', 38400);
configureTerminator(handles.arduinoObj,'CR/LF');
%
for i=1:8
handles.message = readline(handles.arduinoObj);
disp(handles.message)
end
create_patch(handles);
% Update handles structure
%guidata(hObject, handles);
% UIWAIT makes Hapticfinal wait for user response (see UIRESUME)
% uiwait(handles.finger);
function create_patch(handles)
if ishandle(handles.region1)
delete(handles.region1);
end
v_or_h = handles.v_or_h_array(handles.exp_counter);
if v_or_h == 0 % Vertical line
v_thick1 = handles.v_thickness_1(handles.exp_counter);
v_thick2 = handles.v_thickness_2(handles.exp_counter);
handles.region1 = patch( ...
'Parent',handles.axes1, ...
'XData',[v_thick1 v_thick2 v_thick2 v_thick1], ...
'YData',[-10 -10 10 10], ...
'FaceColor','red');
set(handles.axes1,'XLim',[-5 0],'YLim',[-10 10]);
% set(handles.axes1,'XLim',[-10 10],'YLim',[-10 10]);
else % Horizontal line
h_thick1 = handles.h_thickness_1(handles.exp_counter);
h_thick2 = handles.h_thickness_2(handles.exp_counter);
handles.region1 = patch( ...
'Parent',handles.axes1, ...
'XData',[-10 10 10 -10], ...
'YData',[h_thick1 h_thick1 h_thick2 h_thick2], ...
'FaceColor','red');
set(handles.axes1,'YLim',[0 5],'XLim',[-10 10]);
% set(handles.axes1,'XLim',[-10 10],'YLim',[-10 10]);
end
set(handles.axes1,'XGrid','on','YGrid','on');
axis(handles.axes1,'equal');
% Update handles structure
guidata(handles.finger,handles);
% call the button motion fcn to update the new patch's color:
finger_WindowButtonMotionFcn(handles.finger);
% UIWAIT makes franck_guide wait for user response (see UIRESUME)
% uiwait(handles.finger);
% --- Outputs from this function are returned to the command line.
function varargout = franck_guide_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VAR ARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in Start_button.
function Start_button_Callback(hObject, eventdata, handles)
% hObject handle to Start_button (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
handles.fileID = fopen('Start_Stop.txt','w');
handles.t = timer('ExecutionMode', 'fixedRate', ...
'Period', 0.5, ...
'TasksToExecute', Inf, ...
'TimerFcn', {@timerCallback, handles.finger});
start(handles.t);
set(handles.Start_button,'Enable','off'); % -> Disable the button
guidata(hObject,handles);% -----> do this to save the updated handles object
function timerCallback(~,~,f)
handles = guidata(f);
%fprintf(fileID,'(X, Y, time) = (%g, %g, %s)\n', get(0, 'PointerLocation'), datetime('now'));
fprintf(handles.fileID,'(X, Y, time) = (%g, %g, %s, %s, %s)\n', get(0, 'PointerLocation'), second(datetime('now')), ...
handles.amplitude{handles.exp_counter},handles.f_df{handles.exp_counter});
%fprintf('calling timer callback\n');
% --- Executes on button press in Next_button.
function Next_button_Callback(hObject, eventdata, handles)
% hObject handle to Next_button (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)uiconfirm(handles.UIFigure,'Are You sure?','Confirm Close',...
handles = guidata(hObject);
new_counter = handles.exp_counter + 1;
if new_counter > numel(handles.v_thickness_1)
msgbox('Experiment is Done!','DONE');
return
end
f = msgbox('Operation Completed','NEXT');
set(handles.text_exp_counter,'String',num2str(new_counter));
% drawnow();
handles.exp_counter = new_counter;
% delete the old patch and create a new one:
create_patch(handles);
% --- Executes on button press in Yes_button.
function Yes_button_Callback(hObject, eventdata, handles)
% hObject handle to Yes_button (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
answer = questdlg('Did You Feel it?', ...
'Vibration Feeling', ...
'YES','NO','CANCEL ','CANCEL ');
% Handle response
switch answer
case 'YES'
fileID= fopen('Vibr_ans.txt2','a');
YES = "I FEEL IT";
fprintf (fileID, "(%s,%s)\n",YES,handles.f_df{handles.exp_counter});
fclose(fileID);
%disp([answer ' yes i feel it.'])
%Yes_answer = 1;
case 'NO'
fileID= fopen('Vibr_ans.txt2','a');
NO = "I DON'T FEEL IT";
fprintf (fileID, "(%s,%s)\n",NO,handles.f_df{handles.exp_counter});
fclose(fileID);
%disp([answer ' no i don''t feel it.'])
%No_answer = 2;
case 'CANCEL'
disp('cancel')
Cancel = 0;
end
% --- Executes on button press in Stop_button.
function Stop_button_Callback(hObject, eventdata, handles)
% hObject handle to Stop_button (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
handles = guidata(hObject);
stop(handles.t) %whenever we want to stop.
fclose(handles.fileID);
set(handles.Start_button,'Enable','on'); % -> Enable the button
guidata(hObject,handles);
% --- Executes on mouse motion over figure - except title and menu.
function finger_WindowButtonMotionFcn(hObject, eventdata, handles)
% hObject handle to finger (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
handles = guidata(hObject);
pos = get(hObject, 'currentpoint'); % get mouse location on figure
global x;
global y;
x = pos(1);
y = pos(2); % assign locations to x and y
set(handles.xloc, 'string', ['x loc:' num2str(x)]); % update text for x loc
set(handles.yloc, 'string', ['y loc:' num2str(y)]); % update text for y loc
% Determine if mouse is within the region
p_x = get(handles.region1,'XData');
p_x = p_x([1 2]);
p_y = get(handles.region1,'YData');
p_y = p_y([1 3]);
ax_xl = get(handles.axes1,'XLim');
ax_yl = get(handles.axes1,'YLim');
ax_units = get(handles.axes1,'Units');
if ~strcmp(ax_units,'pixels')
set(handles.axes1,'Units','pixels')
end
ax_pos = get(handles.axes1,'Position'); % axes1 position in pixels
if ~strcmp(ax_units,'pixels')
set(handles.axes1,'Units',ax_units);
end
% convert the patch XData and YData from axes coordinates to figure coordinates in pixels
p_x = (p_x-ax_xl(1))/(ax_xl(2)-ax_xl(1))*ax_pos(3)+ax_pos(1);
p_y = (p_y-ax_yl(1))/(ax_yl(2)-ax_yl(1))*ax_pos(4)+ax_pos(2);
if x >= p_x(1) && x <= p_x(2) && y >= p_y(1) && y <= p_y(2)
set(handles.region1,'FaceColor','g');
writeline(handles.arduinoObj, handles.amplitude{handles.exp_counter})
else
set(handles.region1,'FaceColor','r');
writeline(handles.arduinoObj, '0&1!')
end
  21 Comments
dpb
dpb on 1 Jun 2022
There's nothing there that would write the 'Start' and 'Stop' unless the start(handles.t) and stop(handles.t) function calls do it as part of their functionality. If so, would have to know the internals there to know what, specifically it's writing.
I've never used GUiDE so I've no idea what's in the user data or what those functions actually do...or are they part of Arduino stuff--I've never had one of them, either...

Sign in to comment.

Accepted Answer

dpb
dpb on 31 May 2022
Edited: dpb on 2 Jun 2022
OK, I couldn't stand the suspense... :)
tT=readtable('EXPERİMENT_SU8.xlsx','Sheet',3,'Range','A2142:A5799','ReadVariableNames',0);
tT.Var1=strtrim(extractAfter(tT.Var1,'='));
tT.Var1=strtrim(extractBetween(tT.Var1,'(',')'));
T=split(tT.Var1,',');
T=str2double(T(:,3));
nMin=sum(diff(T)<0);
tElapsed=duration(0,0,60*nMin+T(end)-T(1));
results in
>> tElapsed
tElapsed =
duration
00:30:30
>>
which is expected simply by counting records.
  15 Comments
dpb
dpb on 2 Jun 2022
>> tT=readtable('EXPERİMENT_SU8.xlsx','Sheet',3,'Range','A2142:A5799','ReadVariableNames',0);
>> tT.Var1=strtrim(extractAfter(tT.Var1,'='));
>> tT.Var1=strtrim(extractBetween(tT.Var1,'(',')'));
>> T=split(tT.Var1,',');
>> T=str2double(T(:,3));
>> nMin=sum(diff(T)<0)
nMin =
30
>> tElapsed=duration(0,0,60*nMin+T(end)-T(1))
tElapsed =
duration
00:30:28
>>
I just redid that sample case and indeed, the lowercase t was left over from a prior case/test...the actual time for that file section turns out to be 28 seconds instead of 30 after the minutes.
But, that section of that file doesn't have a missing separator; it works as is -- that doesn't mean there isn't one missing somewhere else in the file -- or that you won't have a similar symptom if you get a wrong set of indices; I've not tried to do anything else in that file.
dpb
dpb on 3 Jun 2022
So the answer still is "I don't know what it's supposed to be; it's your experiment and data; I can't reliably interpret its meaning/correctness, only read what's in the file."
That didn't come out as I really intended -- what I'm getting at is that I don't know which file nor what range you passed that produced the problem so I can't see what the content of the file is at that point -- as noted earlier, you need to go open the file you used and look at the area pointed out to by the error message and see what that content is -- if it's a bad record or whether you just passed a set of indices that encompass a break in the file.

Sign in to comment.

More Answers (1)

dpb
dpb on 31 May 2022
The discussion of the file format aside, I thought that was the issue in converting to times initially and didn't notice the issue about having just used clock seconds.
You'll have to find the locations in the vector where the clock turned over a new minute and add that many minutes to the difference --
iEnd=153;
nMin=sum(diff(t(1:iEnd))<0);
tElapsed=60*nMin+t(iEnd)-t(1);

Categories

Find more on Graphics Object Programming in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!