-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathPSOC_Filter.m
103 lines (92 loc) · 2.34 KB
/
PSOC_Filter.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
function filtered = PSOC_Filter(signal)
%% Init
n = length(signal);
time = tic;
s1 = serial('COM6', 'Baudrate', 9600);
fopen(s1);
try
fwrite(s1,'s');
catch
fclose(s1);
delete(s1);
filtered = NaN;
return;
end
disp([int2str(toc(time)) ' : Waiting for a reply']);
%% Wait for a reply
t = tic;
while(s1.BytesAvailable ~= 0)
% Timeout 6sec
if(toc(t) > 6)
filtered = NaN;
% Received no reply
fclose(s1);
delete(s1);
return;
end
end
disp([int2str(toc(time)) ' : Psoc is ready']);
% Psoc is ready
%% Start transmitting
for k = 1:n
try
fwrite(s1, signal(k),'int16');
catch
fclose(s1);
filtered = NaN;
delete(s1);
return;
end
while(s1.BytesAvailable ~= 0)
end
end
disp([int2str(toc(time)) ' : Data transmitted correctly']);
%% Start riceiving
t = tic;
while(s1.BytesAvailable == 0)
% Wait for data processing
% Timeout 10sec
if(toc(t) > 10)
filtered = NaN;
% Received no reply
fclose(s1);
delete(s1);
return;
end
end
disp([int2str(toc(time)) ' : Started receiving data']);
filtered = 0;
while(true)
try
filtered = [filtered byte2word(fread(s1, s1.BytesAvailable))'];
catch
fclose(s1);
delete(s1);
display(filtered)
filtered = NaN;
return;
end
if(length(filtered) == n)
break;
elseif(length(filtered) == n+1)
filtered = filtered(2:end);
break;
end
t = tic;
while(s1.BytesAvailable == 0)
% Timeout 6sec
if(toc(t) > 6)
filtered = NaN;
% Received no reply
fclose(s1);
delete(s1);
display('Timeout');
return;
end
end
end
fclose(s1);
delete(s1);
disp([int2str(toc(time)) ' : Finish']);
return;
end