Skip to content
Snippets Groups Projects
Commit d329fa4f authored by Daniel Lemus's avatar Daniel Lemus
Browse files

First Commit

parents
No related branches found
No related tags found
No related merge requests found
Showing
with 476 additions and 0 deletions
# MacOS
.DS_Store
#Matlab
*.m~
\ No newline at end of file
function cl_out = findAttrValue(obj,attrName,varargin)
if ischar(obj)
mc = meta.class.fromName(obj);
elseif isobject(obj)
mc = metaclass(obj);
end
ii = 0; numb_props = length(mc.PropertyList);
cl_array = cell(1,numb_props);
for c = 1:numb_props
mp = mc.PropertyList(c);
if isempty (findprop(mp,attrName))
error('Not a valid attribute name')
end
attrValue = mp.(attrName);
if attrValue
if islogical(attrValue) || strcmp(varargin{1},attrValue)
ii = ii + 1;
cl_array(ii) = {mp.Name};
end
end
end
cl_out = cl_array(1:ii);
end
\ No newline at end of file
close all
clear all
clc
p_ard = serialport("/dev/tty.usbmodem146401",9600);
temp = nan(1e7,1);
time = nan(1e7,1);
% Create figure handle
figure(1)
ax = subplot(1,1,1);
hold(ax,'on');
line_temp_1 = plot(time,temp);
line_temp_1.LineWidth = 2;
line_temp_1.Marker = 'none';
line_temp_1.DisplayName = 'Temp Sensor 1';
line_temp_2 = plot(time,temp);
line_temp_2.LineWidth = 2;
line_temp_2.Marker = 'none';
line_temp_2.DisplayName = 'Temp Sensor 2';
line_temp_3 = plot(time,temp);
line_temp_3.LineWidth = 2;
line_temp_3.Marker = 'none';
line_temp_3.DisplayName = 'Temp Sensor 3';
ax.XLabel.String = 'Time (s)';
ax.YLabel.String = 'Temperature (C)';
ax.YAxis.FontSize = 16;
ax.XAxis.FontSize = 16;
% ax.YLim = [0 50];
% ax.XLim = [0 100];
l = legend;
l.FontSize = 16;
% Autoscale axis
addlistener(line_temp_1,'YData','PostSet',@(~,~)axslims([ax line_temp_1]));
% Handle to stop while loop
flag = true;
dialogBox = uicontrol('Style', 'PushButton', 'String', 'Stop','Callback', 'flag = false;');
tic;
sync_time = datetime('now');
i_ard = 1;
while flag
% bytes_ard = p_ard.NumBytesAvailable;
buffer_ard = readline(p_ard); % Read buffer (slower than relay one)
t_ard = toc;
temp_ard = str2double(split(strtrim(buffer_ard),','));
disp(t_ard);
% Skip nan values
if any(~isnan(temp_ard))
if i_ard == 1
t0_ard = t_ard;
% t0_ard = t0_relay;
end
% Update plot values
line_temp_1.YData(i_ard) = temp_ard(1);
line_temp_1.DisplayName = ['Temp 1 ' num2str(temp_ard(1))];
line_temp_2.YData(i_ard) = temp_ard(2);
line_temp_2.DisplayName = ['Temp 2 ' num2str(temp_ard(2))];
line_temp_3.YData(i_ard) = temp_ard(3);
line_temp_3.DisplayName = ['Temp 3 ' num2str(temp_ard(3))];
line_temp_1.XData(i_ard) = t_ard-t0_ard;
line_temp_2.XData(i_ard) = t_ard-t0_ard;
line_temp_3.XData(i_ard) = t_ard-t0_ard;
i_ard = i_ard + 1;
end
disp(toc-t_ard);
end
% ------------------------------------------------------
% Auto scale axis
% ------------------------------------------------------
function axslims(handles)
ax = handles(1);
line = handles(2);
dt = 30;
tmax = max(dt,max(line.XData));%+dt*0.2;
tmin = 0;
% tmin = max(0,tmax-dt);
ax.XLim = [tmin tmax*1.2];
def_temp = 40;
ymax = max(def_temp,max(line.YData));
ax.YLim(1) = 0;
ax.YLim(2) = ymax*1.2;
end
clc
clear all
close all
%% Store relay and hot plate parameters
Param.relay_on_temp = input('Temperature Relay ON\n');
Param.relay_off_temp = input('Temperature Relay OFF\n');
% Param.hot_plate_set = input('Hot Plate setting\n');
Param.pressure = input('Pressure (mbar)\n');
Param.rpm = input('Respiratory frequency (rpm)\n');
Param.weigths = input('Number of weights\n');
Param.lever = input('weights postion (cm)\n');
% hose_lenght = input('Hose length\n');
%% Get serial port
port_list = seriallist';
if ~ispc
port_idx = contains(port_list,'tty');
port_list = port_list(port_idx);
end
port_table = table(port_list,'RowNames',cellstr(string(1:length(port_list))));
disp(port_table)
sel_relay = input('Select Temperature relay Port\n');
while ~isa(sel_relay,'numeric')
sel_relay = input('Select Port\n');
end
sel_ard = input('Select Temperature arduino\n');
while ~isa(sel_ard,'numeric')
sel_ard = input('Select Port\n');
end
%% Configure ports
% Configure Serial Port temperature relay
% p_relay = serialport("/dev/tty.SLAB_USBtoUART",1200);
p_relay = serialport(port_table.port_list(sel_relay),1200);
p_relay.DataBits = 7;
configureTerminator(p_relay,'LF')
% Configure serial port arduino
% p_ard = serialport("/dev/tty.usbmodem146301",9600);
p_ard = serialport(port_table.port_list(sel_ard),9600);
%% Setup visualization
% Prelocate for speed (~ 2 hours of readings)
temp = nan(10000000,1);
time = nan(10000000,1);
% Create figure handle
figure(1)
ax = subplot(1,1,1);
hold(ax,'on');
line_temp_relay = plot(time,temp);
line_temp_relay.LineWidth = 2;
line_temp_relay.Marker = 'none';
line_temp_relay.DisplayName = 'Relay Temp Sensor';
n_temp_sensors = 3;
for i = 1: n_temp_sensors
line_temp(i) = plot(time,temp);
line_temp(i).LineWidth = 2;
line_temp(i).Marker = 'none';
line_temp(i).DisplayName = sprintf('Temp Sensor %d',i);
% line_temp_2 = plot(time,temp);
% line_temp_2.LineWidth = 2;
% line_temp_2.Marker = 'none';
% line_temp_2.DisplayName = 'Temp Sensor 2';
%
% line_temp_3 = plot(time,temp);
% line_temp_3.LineWidth = 2;
% line_temp_3.Marker = 'none';
% line_temp_3.DisplayName = 'Temp Sensor 3';
end
ax.XLabel.String = 'Time (s)';
ax.YLabel.String = 'Temperature (C)';
ax.YAxis.FontSize = 16;
ax.XAxis.FontSize = 16;
% ax.YLim = [0 50];
% ax.XLim = [0 100];
l = legend;
l.FontSize = 16;
% Autoscale axis
addlistener(line_temp_relay,'YData','PostSet',@(~,~)axslims([ax line_temp_relay]));
i = 1;
i_ard = 1;
sync_time = datetime('now');
% Handle to stop while loop
flag = true;
dialogBox = uicontrol('Style', 'PushButton', 'String', 'Stop','Callback', 'flag = false;');
tic
while flag
% bytes_ard = p_ard.NumBytesAvailable;
% if bytes_ard >= 13
% buffer_ard = read(p_ard,bytes_ard,'char'); % Read buffer
% % buffer_ard = readline(p_ard); % Read buffer (slower than relay one)
% t_ard = toc;
% temp_ard = str2double(split(strtrim(buffer_ard),','));
% else
% temp_ard = nan;
% end
%
% % buffer_relay = readline(p_relay); % Read line
% bytes_relay = p_relay.NumBytesAvailable;
% if bytes_relay >= 7
% buffer_relay = read(p_relay,p_relay.NumBytesAvailable,'char'); % Read buffer
% t_relay = toc;
% else
% buffer_relay = '';
% end
n_ard_bytes = n_temp_sensors * 6 + 1;
while p_ard.NumBytesAvailable < n_ard_bytes
% bytes_ard = ;
end
% bytes_ard = p_ard.NumBytesAvailable;
bytes_ard = round(p_ard.NumBytesAvailable/n_ard_bytes)*n_ard_bytes;
buffer_ard = read(p_ard,bytes_ard,'char'); % Read buffer
t_ard = toc;
% buffer_ard = readline(p_ard); % Read buffer
% t_ard = toc;
temp_buffer = strsplit(strtrim(buffer_ard),{'\r','\n'});
temp_ard = str2double(split(temp_buffer(end),','));
% else
% temp_ard = nan;
% end
% buffer_relay = readline(p_relay); % Read line
while p_relay.NumBytesAvailable < 7
% bytes_relay = ;
end
bytes_relay = round(p_relay.NumBytesAvailable/7)*7;%p_relay.NumBytesAvailable;
buffer_relay = read(p_relay,bytes_relay,'char'); % Read buffer
t_relay = toc;
% buffer_relay = read(p_relay,p_relay.NumBytesAvailable,'char'); % Read buffer
% else
% buffer_relay = '';
% end
% disp(buffer_relay)
% disp([bytes_relay bytes_ard])
% if contains(buffer_relay,'Err')
% ax.Title.Color = [255 0 0]/255;
%
% switch strtrim(buffer_relay)
% case 'Err 2'
% ax.Title.String = 'Error: Relay Sensor is disconnected.';
% case 'Err 3'
% ax.Title.String = 'Error: Relay Corrupt temperature data.';
% case 'Err 4'
% ax.Title.String = 'Error: Relay Sensor was reset unexpectedly.';
% case 'Err 1'
% ax.Title.String = 'Error: Relay Sensor has a short circuit.';
% end
% continue
% else
% ax.Title.String = 'Measuring';
% ax.Title.Color = [50 200 0]/255;
% end
% Get numeric data
% temp_relay = str2double(buffer_relay);
% temp_ard = str2double(split(strtrim(buffer_ard),','));
temp_relay = str2double(strsplit(strtrim(buffer_relay),'\r'));
%str2double(split(strtrim(buffer_relay)));
% disp(temp_ard)
% Skip nan values
if any(~isnan(temp_relay))
% if i == 1
% % t0_relay = t_relay;
% t0_relay = t_ard;
% end
% Update plot values
line_temp_relay.YData(i) = temp_relay(end);
line_temp_relay.DisplayName = ['Temp rel ' num2str(temp_relay(end))];
line_temp_relay.XData(i) = t_relay;
i = i + 1;
drawnow;
end
% Skip nan values
if any(~isnan(temp_ard))
% if i_ard == 1
% t0_ard = t_ard;
% % t0_ard = t0_relay;
% end
% Update plot values
for j = 1 : n_temp_sensors
line_temp(j).YData(i_ard) = temp_ard(j);
line_temp(j).DisplayName = sprintf('Temp %d = %.1f',j, temp_ard(j));
line_temp(j).XData(i_ard) = t_ard;
end
% line_temp_2.YData(i_ard) = temp_ard(2);
% line_temp_2.DisplayName = ['Temp 2 ' num2str(temp_ard(2))];
% line_temp_1.XData(i_ard) = t_ard-t0_ard;
% line_temp_2.XData(i_ard) = t_ard-t0_ard;
%
%
% line_temp_3.YData(i_ard) = temp_ard(3);
% line_temp_3.DisplayName = ['Temp 3 ' num2str(temp_ard(3))];
% line_temp_3.XData(i_ard) = t_ard-t0_ard;
i_ard = i_ard + 1;
end
end
%% Save
clear temp
for i = 1 : n_temp_sensors
str = sprintf('t%d',i);
temp.(str) = line_temp(i).YData;
idx = find(~isnan(temp.(str)),1,'last');
temp.(str) = temp.(str)(1:idx);
% temp.t2 = line_temp_2.YData;
% temp.t3 = line_temp_3.YData;
end
t.ard = line_temp(1).XData(1:idx);
% Crop data
temp.relay = line_temp_relay.YData;
idx = find(~isnan(temp.relay),1,'last');
temp.relay = temp.relay(1:idx);
t.relay = line_temp_relay.XData(1:idx);
% idx = find(~isnan(temp.t1),1,'last');
% temp.t1 = temp.t1(1:idx);
% temp.t2 = temp.t2(1:idx);
% temp.t3 = temp.t3(1:idx);
%% Close port
p_relay.delete;
p_ard.delete;
% Hide Break Box
dialogBox.Visible = 'off';
% Rescale axis
ax.XLimMode = 'auto';
ax.Title.String = '';
line_temp_relay.Marker = 'none';
line_temp_1.Marker = 'none';
line_temp_2.Marker = 'none';
hold(ax,'off');
%% Save
save(['TempMeasurement_' datestr(sync_time,'YYYYmmdd-HHMMSS')],'sync_time',...
'temp','t','Param');
% ------------------------------------------------------
% Auto scale axis
% ------------------------------------------------------
function axslims(handles)
ax = handles(1);
line = handles(2);
dt = 30;
tmax = max(dt,max(line.XData));%+dt*0.2;
tmin = 0;
% tmin = max(0,tmax-dt);
ax.XLim = [tmin tmax*1.2];
def_temp = 40;
ymax = max(def_temp,max(line.YData));
ax.YLim(1) = 0;
ax.YLim(2) = ymax*1.2;
end
import serial
import csv
import sys
#excel stuff
#from time import gmtime, strftime
#resultFile=open('MyData.csv','wb')
#end excel stuff
def scan():
"""scan for available ports. return a list of tuples (num, name)"""
available = []
for i in range(256):
try:
s = serial.Serial(i)
available.append( (i, s.portstr))
s.close() # explicit close 'cause of delayed GC in java
except serial.SerialException:
pass
return available
if __name__=='__main__':
print ("Found ports:")
for n,s in scan():
print ("(%d) %s" % (n,s))
selection = input("Enter port number:")
try:
ser = serial.Serial(eval(selection), 9600, timeout=1)
print("connected to: " + ser.portstr)
except serial.SerialException:
pass
f = open('output.csv', 'w+')
while True:
# Read a line and convert it from b'xxx\r\n' to xxx
line = ser.readline().decode('utf-8')
if line: # If it isn't a blank line
f.write(line)
f.close()
#print(line)
#with open('test.csv', 'w') as csv_file:
# writer = csv.DictWriter(csv_file, fieldnames=['header1'], lineterminator='\n')
ser.close()
\ No newline at end of file
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment