function btn1_Callback(hObject, eventdata, handles)
set(handles.btn1,'Enable','off');
set(handles.btn2,'Enable','on');
set(handles.Comport,'Enable','off');
set(handles.Baudrate,'Enable','off');
set(handles.start_togglebutton,'Enable','on');
set(handles.PB_Exit,'Enable','on');
global s;
global t;
portList = get(handles.Comport,'String');
portIndex = get(handles.Comport,'Value');
port = portList(portIndex,:);
set(s,'Port',char(port));
brList = get(handles.Baudrate,'String');
brIndex = get(handles.Baudrate,'Value');
br = char(brList(brIndex,:));
br = str2num(br);
set(s,'Baudrate',br);
if strcmp(get(hObject,'String'),'Connect')
assignin('base', 't0', 0);
s = serial(get_stringPopup(handles.Comport));
s.InputBufferSize = 20000;
s.Baudrate = br;
s.DataBits = 8;
s.Parity = 'none';
s.StopBit = 1;
s.BytesAvailableFcnCount = 1000;
s.BytesAvailableFcnMode = 'terminator';
try
handles.s = s;
fopen(handles.s);
pause(0.2);
delete(timerfindall);
TMR_PERIOD = 0.5;
t = timer('TimerFcn',@(x,y)getDataUART(s),'Period',TMR_PERIOD);
set(t,'ExecutionMode','fixedRate');
start(t);
catch e
if(strcmp(s.Status,'Open'))
fclose(handles.s);
end
errordlg(e.message);
end
else
set(hOject,'String','Connect')
fclose(handles.s);
stop(t);
end
guidata(hObject,handles);
function getDataUART(s)
load handles
persistent nPts;
persistent xTime;
persistent yDataCH1;
global b, global start,
data = fread(s,s.BytesAvailable);
fNaN=find(isnan(data)==1);
if (~isempty(fNaN))
for i=1:length(fNaN)
data(fNaN(i))=0;
end
end
t0 = evalin('base', 't0');
if (t0==0)
nPts = 5000;
xTime = ones(1,nPts)*NaN;
yDataCH1 = ones(1,nPts)*NaN;
end
lenFrameData=length(data);
nDataCH1 = [];
synIndex = 1;
while (synIndex < (lenFrameData - 5))
if ((data(synIndex)==255)&&(data(synIndex+1)==0))
nDataCH1 = [nDataCH1 (data(synIndex+3)*256+data(synIndex+2))];
synIndex = synIndex + 6;
else
synIndex = synIndex + 1;
end
end
lenData = length(nDataCH1);
time = t0:1:t0+lenData-1;
t0 = t0+lenData-1;
assignin('base', 't0', t0);
xTime(1:end-lenData) = xTime(lenData+1:end);
xTime(end-lenData+1:end) = time;
global HeartCountReal, global timecount
yDataCH1(1:end-lenData) = yDataCH1(lenData+1:end);
yDataCH1(end-lenData+1:end) = 0 + 1*nDataCH1*5/1023;
output=yDataCH1;
output1=filter(b,1,output);
heart_processed1=output1(1,end-49:end).^2;
check1=size(find(heart_processed1>1.56),2);
timecount=timecount+1;
if check1>0
HeartCountReal=HeartCountReal+1;
end
if timecount==120;
set(handles.bpm_edit,'string',num2str(HeartCountReal))
if HeartCountReal <60
set(handles.heartStatus_text,'string','LOW');
elseif HeartCountReal<=100
set(handles.heartStatus_text,'string','NORMAL');
else
set(handles.heartStatus_text,'string','HIGH');
end
HeartCountReal=0;
timecount=0;
end
global timelength,global strengthEx,global save_exper, global save_heart,global heart_count,global countdown
if start==1
save_heart=[save_heart output1(1,end-49:end)];
assignin('base', 'save_heart', save_heart)
out1=output1(1,end-49:end).^2;
S=size(find(out1>1.7),2);
if S>0
heart_count=heart_count+1;
end
timelength=timelength+1;
if rem(timelength,2)==0
countdown= countdown-1;
set(handles.countdown_text,'string',[num2str(countdown) ' s'])
end
if timelength==30
start=0;
set(handles.start_togglebutton,'value',0);
HeartRate=heart_count*4;
set(handles.hr_text,'string',[num2str(HeartRate) ' BPM']);
if HeartRate <60
set(handles.hb_text,'string','LOW');
elseif HeartRate<=100
set(handles.hb_text,'string','NORMAL');
else
set(handles.hb_text,'string','HIGH');
end
save_exper=[save_exper strengthEx];
assignin('base', 'save_exper', save_exper)
heart_count=0;
end
end
assignin('base', 'yDataCH1', yDataCH1);
assignin('base', 'xTime', xTime);
xmax=max(xTime);
set(handles.axes3,'NextPlot','add');
grid(handles.axes3, 'on');
plot(handles.axes3,xTime,output1,'r-','LineWidth',2) ;
title(handles.axes3,'OXY SATURATION OF FINGER 1')
axis(handles.axes3,[xmax-400 xmax 0 7]);
save('handles.mat', 'handles');
function doublePopup = get_doublePopup(hObject,handles)
val = get(hObject,'Value');
string_list = get(hObject,'String');
selected_string = string_list{val};
doublePopup = str2double(selected_string);
function stringPopup = get_stringPopup(hObject,handles)
val = get(hObject,'Value');
string_list = get(hObject,'String');
stringPopup = string_list{val};
1 Comment
Direct link to this comment
https://in.mathworks.com/matlabcentral/answers/291198-error-while-evaluating-timerfcn-for-timer-timer-1-size-must-be-greater-than-0#comment_374301
Direct link to this comment
https://in.mathworks.com/matlabcentral/answers/291198-error-while-evaluating-timerfcn-for-timer-timer-1-size-must-be-greater-than-0#comment_374301
Sign in to comment.