-
Notifications
You must be signed in to change notification settings - Fork 4
/
Arduino code.rtf
83 lines (76 loc) · 3.09 KB
/
Arduino code.rtf
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
{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\fnil\fcharset0 Calibri;}}
{\colortbl ;\red0\green0\blue0;}
{\*\generator Riched20 6.2.9200}\viewkind4\uc1
\pard\nowidctlpar\li360\sl360\slmult1\cf1\f0\fs24\lang16393 #include<SoftwareSerial.h>\tab\tab\tab //Enable Serial Communication \par
\pard\nowidctlpar\fi360\li4680\sl360\slmult1 // EMA formula: S\sub 1\nosupersub =Y\sub 1\nosupersub\par
\pard\nowidctlpar\li360\sl360\slmult1 \tab\tab\tab\tab\tab // S\sub t\nosupersub =(a*y\sub t\nosupersub ) +(1-a) S\sub\fs36 t\fs24 -1\nosupersub\par
int sensorVal=0;\par
float EMA_al=0.89;\tab\tab\tab\tab // a (smoothing constant) high and low\par
float EMA_ah=0.95;\par
float EMA_sl=0; \tab\tab\tab\tab\tab // s high and low\par
float EMA_sh=0;\par
float bandpassVal;\par
int threshold=-1;\par
int ecg[100];\par
int i=0;\par
int diff;\par
int heart_rate;\par
int avg[10];\par
int j=0;\par
int average;\par
int sum=0;\par
\par
void setup ()\par
\{\par
Serial.begin(9600);\par
pinMode (10, INPUT); \tab\tab\tab //leads off detection LO+\par
pinMode (11, INPUT); \tab\tab\tab //leads off detection LO-\par
float EMA_sl=analogRead(A0);\tab\tab\tab //read values from analog pin A0\par
float EMA_sh=analogRead(A0);\par
\}\par
void loop ()\par
\{ \par
sensorVal=analogRead(A0);\par
EMA_sl=(EMA_al*sensorVal) +((1-EMA_al) *EMA_sl);\par
EMA_sh=(EMA_ah*sensorVal) +((1-EMA_ah) *EMA_sh);\par
bandpassVal=EMA_sh-EMA_sl;\par
ecg[i]=bandpassVal;\tab\tab\tab\tab //record ecg data\par
if (ecg[i]<threshold)\tab\tab\tab\tab //QRS complex detection\par
\{\tab\tab\par
\pard\nowidctlpar\fi360\li1080\sl360\slmult1 diff=i;\par
\pard\nowidctlpar\li360\sl360\slmult1 \tab\tab heart_rate=60 / (diff * 0.0204);\tab\par
\tab\tab i= 0;\tab\tab\tab\tab\tab //if QRS is detected, reset the array\par
\}\par
else\par
\{\tab\tab\par
\pard\nowidctlpar\fi360\li1080\sl360\slmult1 heart_rate=0;\par
\pard\nowidctlpar\li360\sl360\slmult1 \tab \tab i++;\par
\} \par
\par
if (heart_rate! =0 && heart_rate<150)\tab\tab //filter out noisy values\par
\{\tab\tab avg[j]=heart_rate;\tab\tab\tab //record 10 heart rate values\par
\tab\tab j++;\par
\tab\tab if(j==10)\par
\tab\{for (int k=0; k<=9; k++)\par
\tab\tab\{sum=sum+avg[k];\}\par
\tab average=sum/10;\tab //average 10 heart rate values to improve stability\par
\tab j=0;\tab\tab\tab\tab\tab //reset array after averaging\par
\}\par
else\par
\{\tab average=0;\par
\tab sum=0;\par
\}\par
\}\par
else\par
\{\} \par
\par
Serial.print(-bandpassVal);\par
Serial.print(",");\tab\tab\tab\tab //delimiter for Android application\par
Serial.print(average);\par
average=0;\tab\tab\tab\tab\tab //reset average to 0\par
Serial.println();\par
delay (20);\tab\tab\tab\tab\tab //20 milliseconds delay\par
\}\par
\pard\sa200\sl276\slmult1\cf0\f1\fs22\lang9\par
}