1

Dependencies:   mbed LSM9DS1 FastPWM

Committer:
NTesla
Date:
Tue Apr 02 13:22:17 2019 +0000
Revision:
1:72bcbf11c621
Parent:
0:33061e64e773
Vasko ENSIL

Who changed what in which revision?

UserRevisionLine numberNew contents of line
NTesla 0:33061e64e773 1 #include "mbed.h"
NTesla 0:33061e64e773 2 #include "LSM9DS1.h"
NTesla 0:33061e64e773 3 #include "FastPWM.h"
NTesla 0:33061e64e773 4 #include <math.h>
NTesla 1:72bcbf11c621 5 /*
NTesla 1:72bcbf11c621 6 HOW TO CHANGE SETTING:
NTesla 1:72bcbf11c621 7 1. Put "true" only in one of the next lines (15-18)
NTesla 1:72bcbf11c621 8 2. Put "true" or "false" on PS_MODE if it's necessary (line 20)
NTesla 1:72bcbf11c621 9 3. If using analog accelerometr - change "calibreted counts" according to the table(lines 23-28)
NTesla 1:72bcbf11c621 10 4. If using optical transmitting choose PWM_MODE - 455 or 38 for 455 kHz and 38 kHz pwm (line 41)
NTesla 1:72bcbf11c621 11 Also if using optical transmitting choose BAUD_RATE 4800 for 38 kHz
NTesla 1:72bcbf11c621 12 or 4800, 9600, 19200, 38400 for 455 kHz (line42)
NTesla 1:72bcbf11c621 13 */
NTesla 0:33061e64e773 14 // setting of MIX DEVICE
NTesla 0:33061e64e773 15 #define DA_PS_BT false //Digital Accelerometer + Pulse Sensor + Bluetooth
NTesla 1:72bcbf11c621 16 #define AA_PS_BT fasle// Analog Accelerometer + Pulse Sensor + Bluetooth
NTesla 1:72bcbf11c621 17 #define DA_PS_Op false//Digital Accelerometer + Pulse Sensor + Optical
NTesla 1:72bcbf11c621 18 #define AA_PS_Op true// Analog Accelerometer + Pulse Sensor + Optical
NTesla 1:72bcbf11c621 19
NTesla 1:72bcbf11c621 20 #define PS_MODE false // On/Off Pulse Sensor (
NTesla 1:72bcbf11c621 21 #define PS_PIN A3 //Pulse Sensor pin
NTesla 0:33061e64e773 22
NTesla 1:72bcbf11c621 23 float X0 = 1.68; //calibrated counts of analog Accelerometer
NTesla 1:72bcbf11c621 24 float Y0 = 1.69;
NTesla 1:72bcbf11c621 25 float Z0 = 1.70;
NTesla 1:72bcbf11c621 26 float Sx = 0.69;
NTesla 1:72bcbf11c621 27 float Sy = 0.70;
NTesla 1:72bcbf11c621 28 float Sz = 0.68;
NTesla 0:33061e64e773 29
NTesla 0:33061e64e773 30 #define ACC_X_PIN A6
NTesla 0:33061e64e773 31 #define ACC_Y_PIN A5 //Analog Accelerometer pins
NTesla 0:33061e64e773 32 #define ACC_Z_PIN A4
NTesla 0:33061e64e773 33
NTesla 0:33061e64e773 34
NTesla 0:33061e64e773 35 #define BT_TX_PIN PA_9 // Bluetooth pins
NTesla 0:33061e64e773 36 #define BT_RX_PIN PA_10
NTesla 0:33061e64e773 37
NTesla 1:72bcbf11c621 38 #define OPT_TX_PIN A7 //A7 optical pins, pwm, baudrate
NTesla 1:72bcbf11c621 39 #define OPT_RX_PIN A2
NTesla 1:72bcbf11c621 40
NTesla 0:33061e64e773 41 #define PWM_MODE 455
NTesla 1:72bcbf11c621 42 #define BAUD_RATE 4800
NTesla 1:72bcbf11c621 43 #define PWM_PIN D10 //D10
NTesla 1:72bcbf11c621 44
NTesla 0:33061e64e773 45
NTesla 0:33061e64e773 46 #if (DA_PS_Op || DA_PS_BT)
NTesla 0:33061e64e773 47 LSM9DS1 acc(D4, D5);
NTesla 0:33061e64e773 48 #endif
NTesla 0:33061e64e773 49
NTesla 0:33061e64e773 50 #if (AA_PS_BT || DA_PS_BT) // uart's init
NTesla 0:33061e64e773 51 Serial pc(SERIAL_TX, SERIAL_RX); // tx, rx
NTesla 0:33061e64e773 52 Serial BT(BT_TX_PIN, BT_RX_PIN); // tx, rx
NTesla 1:72bcbf11c621 53 //RawSerial pc2(A7,NC,115200); // if necessary run second uart
NTesla 0:33061e64e773 54 float acc_x,acc_y,acc_z;
NTesla 0:33061e64e773 55 #endif
NTesla 0:33061e64e773 56
NTesla 0:33061e64e773 57 #if (AA_PS_Op || DA_PS_Op)
NTesla 1:72bcbf11c621 58 Serial Serial2(OPT_TX_PIN,NC,BAUD_RATE);
NTesla 1:72bcbf11c621 59 //RawSerial pc(D1,NC,BAUD_RATE); // if necessary run second uart
NTesla 1:72bcbf11c621 60 uint16_t acc_x,acc_y,acc_z;
NTesla 0:33061e64e773 61 #endif
NTesla 0:33061e64e773 62
NTesla 0:33061e64e773 63 #if (AA_PS_BT || AA_PS_Op)
NTesla 0:33061e64e773 64 AnalogIn X(ACC_X_PIN);
NTesla 0:33061e64e773 65 AnalogIn Y(ACC_Y_PIN);
NTesla 0:33061e64e773 66 AnalogIn Z(ACC_Z_PIN);
NTesla 0:33061e64e773 67 #endif
NTesla 0:33061e64e773 68
NTesla 0:33061e64e773 69 #if (PS_MODE)
NTesla 1:72bcbf11c621 70 AnalogIn P(PS_PIN);
NTesla 0:33061e64e773 71 #endif
NTesla 0:33061e64e773 72
NTesla 0:33061e64e773 73 DigitalOut myled(LED1, 1);
NTesla 0:33061e64e773 74
NTesla 0:33061e64e773 75 PwmOut buzz(A1);
NTesla 0:33061e64e773 76
NTesla 0:33061e64e773 77 float ARes = 2.0 / 32768.0; // Digital ACC have datatype int16_t
NTesla 0:33061e64e773 78 int Signal = 0;
NTesla 1:72bcbf11c621 79 int OldSignal = 0;
NTesla 0:33061e64e773 80 int total = 0;
NTesla 1:72bcbf11c621 81 int Maxn = 0;
NTesla 0:33061e64e773 82 int average = 0;
NTesla 0:33061e64e773 83 int IsoLine = 0;
NTesla 0:33061e64e773 84 int Tpulse = 0;
NTesla 1:72bcbf11c621 85 int Tpulse1 = 0;
NTesla 0:33061e64e773 86 int Tpulse2 = 0;
NTesla 1:72bcbf11c621 87 int Tpulse22;
NTesla 1:72bcbf11c621 88 int PulseOK = 0;
NTesla 0:33061e64e773 89 int AccData[3];
NTesla 1:72bcbf11c621 90 unsigned int trame1,trame2,trame3,trame4,trame5,trame6,trame7,trame8,trame9,tramePULSE;
NTesla 0:33061e64e773 91 int cptmesure;
NTesla 0:33061e64e773 92 Timer T1;
NTesla 0:33061e64e773 93 float delta;
NTesla 0:33061e64e773 94 double Last, Now;
NTesla 0:33061e64e773 95 bool START = false;
NTesla 0:33061e64e773 96 int coun;
NTesla 0:33061e64e773 97 float tableau_x[10], tableau_y[10], tableau_z[10], t_delta[10];
NTesla 1:72bcbf11c621 98 int numReadings = 500;
NTesla 0:33061e64e773 99 int Index = 0;
NTesla 1:72bcbf11c621 100 int readings[500];
NTesla 0:33061e64e773 101 int IndexBPM = 5;
NTesla 0:33061e64e773 102 int IndexB = 0;
NTesla 0:33061e64e773 103 int readingsBPM[5];
NTesla 0:33061e64e773 104 int k;
NTesla 0:33061e64e773 105 int totalBPM;
NTesla 0:33061e64e773 106 int averageBPM;
NTesla 0:33061e64e773 107 int verif;
NTesla 0:33061e64e773 108 int patient;
NTesla 1:72bcbf11c621 109 bool a = true;
NTesla 0:33061e64e773 110
NTesla 0:33061e64e773 111 void setup()
NTesla 0:33061e64e773 112 {
NTesla 0:33061e64e773 113 #if (AA_PS_Op || DA_PS_Op)
NTesla 0:33061e64e773 114 FastPWM mypwm(PWM_PIN,1); //Initializing of clock Output
NTesla 0:33061e64e773 115 //Clock settings for 38kHz
NTesla 0:33061e64e773 116 if (PWM_MODE == 38)
NTesla 0:33061e64e773 117 {
NTesla 0:33061e64e773 118 mypwm.period_us(26.3158);
NTesla 0:33061e64e773 119 mypwm.pulsewidth_us(13.1579);//Duty-Cycle 50% here
NTesla 0:33061e64e773 120 }
NTesla 0:33061e64e773 121 //Clock settings for 455kHz
NTesla 0:33061e64e773 122 if (PWM_MODE == 455)
NTesla 0:33061e64e773 123 {
NTesla 0:33061e64e773 124 mypwm.period_us(2.1978);
NTesla 0:33061e64e773 125 mypwm.pulsewidth_us(1.0989);//Duty-Cycle 50% here
NTesla 0:33061e64e773 126 }
NTesla 0:33061e64e773 127 #endif
NTesla 0:33061e64e773 128
NTesla 0:33061e64e773 129 #if (AA_PS_BT || DA_PS_BT)
NTesla 0:33061e64e773 130 BT.baud(115200);
NTesla 0:33061e64e773 131 pc.baud(115200); // Start serial at 115200 bps
NTesla 0:33061e64e773 132 #endif
NTesla 0:33061e64e773 133
NTesla 0:33061e64e773 134 #if (DA_PS_BT || DA_PS_Op)
NTesla 0:33061e64e773 135 acc.setAcceleroRange(LSM9DS1_ACCELERO_RANGE_2G);
NTesla 0:33061e64e773 136 #endif
NTesla 0:33061e64e773 137 buzz.period_us(2272.7f);
NTesla 0:33061e64e773 138 buzz.write(0.0f);
NTesla 0:33061e64e773 139 }
NTesla 0:33061e64e773 140 #if (PS_MODE)
NTesla 1:72bcbf11c621 141 int readMean(int samples)
NTesla 1:72bcbf11c621 142 {
NTesla 1:72bcbf11c621 143 int sum = 0;
NTesla 1:72bcbf11c621 144 for (int i = 0; i < samples; i++)
NTesla 1:72bcbf11c621 145 sum = sum + (4096*P.read());
NTesla 1:72bcbf11c621 146 return sum/samples;
NTesla 1:72bcbf11c621 147 }
NTesla 0:33061e64e773 148
NTesla 0:33061e64e773 149 void pulse()
NTesla 0:33061e64e773 150 {
NTesla 1:72bcbf11c621 151 Signal = readMean(30);
NTesla 0:33061e64e773 152 total = total - readings[Index];
NTesla 1:72bcbf11c621 153 readings[Index] = Signal;
NTesla 1:72bcbf11c621 154 total = total + readings[Index];
NTesla 1:72bcbf11c621 155 Index = Index + 1;
NTesla 1:72bcbf11c621 156 if (Index >= numReadings) Index = 0;
NTesla 1:72bcbf11c621 157 Maxn = 0;
NTesla 1:72bcbf11c621 158 for (int i = 0; i < numReadings; i++)
NTesla 0:33061e64e773 159 {
NTesla 0:33061e64e773 160 if (readings[i]>Maxn)
NTesla 1:72bcbf11c621 161 Maxn = readings[i];
NTesla 0:33061e64e773 162 }
NTesla 0:33061e64e773 163 average = total/numReadings;
NTesla 1:72bcbf11c621 164 IsoLine = average + ((Maxn - average)*0.5);
NTesla 1:72bcbf11c621 165
NTesla 1:72bcbf11c621 166 if ((Signal > IsoLine) && (OldSignal < IsoLine))
NTesla 0:33061e64e773 167 {
NTesla 1:72bcbf11c621 168 if (k > 0)
NTesla 1:72bcbf11c621 169 {
NTesla 1:72bcbf11c621 170 T1.stop();
NTesla 1:72bcbf11c621 171 Tpulse1 = T1.read_ms();
NTesla 1:72bcbf11c621 172 Tpulse = Tpulse2 + Tpulse1;
NTesla 1:72bcbf11c621 173 Tpulse22 = 60*1000L/Tpulse;
NTesla 1:72bcbf11c621 174 if (Tpulse22 > 40 && Tpulse22 < 240)
NTesla 1:72bcbf11c621 175 PulseOK = Tpulse22;
NTesla 1:72bcbf11c621 176 T1.reset();
NTesla 1:72bcbf11c621 177 T1.start();
NTesla 1:72bcbf11c621 178 k--;
NTesla 1:72bcbf11c621 179 }
NTesla 0:33061e64e773 180 }
NTesla 0:33061e64e773 181 else
NTesla 0:33061e64e773 182 {
NTesla 1:72bcbf11c621 183 if((Signal < IsoLine) && (OldSignal > IsoLine))
NTesla 0:33061e64e773 184 {
NTesla 1:72bcbf11c621 185 if (k < 1)
NTesla 1:72bcbf11c621 186 {
NTesla 1:72bcbf11c621 187 T1.stop();
NTesla 1:72bcbf11c621 188 Tpulse2 = T1.read_ms();
NTesla 1:72bcbf11c621 189 T1.reset();
NTesla 1:72bcbf11c621 190 T1.start();
NTesla 1:72bcbf11c621 191 k++;
NTesla 1:72bcbf11c621 192 }
NTesla 0:33061e64e773 193 }
NTesla 0:33061e64e773 194 }
NTesla 1:72bcbf11c621 195 OldSignal = Signal;
NTesla 0:33061e64e773 196 }
NTesla 0:33061e64e773 197 #endif
NTesla 0:33061e64e773 198 void matrice_euler()
NTesla 0:33061e64e773 199 {
NTesla 0:33061e64e773 200 tableau_x[coun-1]=acc_x;
NTesla 0:33061e64e773 201 tableau_y[coun-1]=acc_y;
NTesla 0:33061e64e773 202 tableau_z[coun-1]=acc_z;
NTesla 0:33061e64e773 203 t_delta[coun-1]=delta;
NTesla 0:33061e64e773 204 }
NTesla 0:33061e64e773 205
NTesla 0:33061e64e773 206 void read_capteur()
NTesla 0:33061e64e773 207 {
NTesla 0:33061e64e773 208 #if (DA_PS_BT) //Digital acc init
NTesla 1:72bcbf11c621 209 acc_x = -acc.getAcceleroRawY()*ARes; // !!axis directions are correct!!
NTesla 1:72bcbf11c621 210 acc_y = acc.getAcceleroRawX()*ARes; // !!axis directions are correct!!
NTesla 1:72bcbf11c621 211 acc_z = acc.getAcceleroRawZ()*ARes; // !!axis directions are correct!!
NTesla 0:33061e64e773 212 #elif (AA_PS_BT) // !!axis directions are correct!!
NTesla 1:72bcbf11c621 213 acc_x = ((double)Y.read()*3.3-Y0)/Sy; // !!axis directions are correct!!
NTesla 1:72bcbf11c621 214 acc_y = -((double)X.read()*3.3-X0)/Sx; // !!axis directions are correct!!
NTesla 1:72bcbf11c621 215 acc_z = -((double)Z.read()*3.3-Z0)/Sz; // !!axis directions are correct!!
NTesla 1:72bcbf11c621 216 #elif (AA_PS_Op) // !!axis directions are correct!!
NTesla 1:72bcbf11c621 217 acc_x = Y.read_u16(); // !!axis directions are correct!!
NTesla 1:72bcbf11c621 218 acc_y = -X.read_u16(); // !!axis directions are correct!!
NTesla 1:72bcbf11c621 219 acc_z = -Z.read_u16(); // !!axis directions are correct!!
NTesla 1:72bcbf11c621 220 #elif (DA_PS_Op) // !!axis directions are correct!!
NTesla 1:72bcbf11c621 221 acc_x = -acc.getAcceleroRawY(); // !!axis directions are correct!!
NTesla 1:72bcbf11c621 222 acc_y = acc.getAcceleroRawX(); // !!axis directions are correct!!
NTesla 1:72bcbf11c621 223 acc_z = acc.getAcceleroRawZ(); // !!axis directions are correct!!
NTesla 0:33061e64e773 224 #endif
NTesla 0:33061e64e773 225 }
NTesla 0:33061e64e773 226
NTesla 0:33061e64e773 227 void loop ()
NTesla 0:33061e64e773 228 {
NTesla 0:33061e64e773 229 read_capteur();
NTesla 0:33061e64e773 230 matrice_euler();
NTesla 0:33061e64e773 231
NTesla 0:33061e64e773 232 #if (AA_PS_BT || DA_PS_BT)
NTesla 1:72bcbf11c621 233 if (coun>=10)
NTesla 0:33061e64e773 234 {
NTesla 0:33061e64e773 235 char s1[50]; //size of the number
NTesla 0:33061e64e773 236 char s2[50];
NTesla 0:33061e64e773 237 char s3[50];
NTesla 0:33061e64e773 238 char s4[50];
NTesla 0:33061e64e773 239 char s5[50];
NTesla 0:33061e64e773 240
NTesla 0:33061e64e773 241 myled=!myled;
NTesla 0:33061e64e773 242 coun=0;
NTesla 0:33061e64e773 243 for(int i=0; i<10; i++)
NTesla 0:33061e64e773 244 {
NTesla 0:33061e64e773 245 sprintf(s1, "%g", tableau_x[i]);
NTesla 0:33061e64e773 246 sprintf(s2, "%g", tableau_y[i]);
NTesla 0:33061e64e773 247 sprintf(s4, "%g", tableau_z[i]);
NTesla 0:33061e64e773 248 sprintf(s3, "%g", t_delta[i]);
NTesla 0:33061e64e773 249 #if (PS_MODE)
NTesla 1:72bcbf11c621 250 sprintf(s5, "%d", PulseOK);
NTesla 0:33061e64e773 251 BT.printf("%s;%s;%s;%s;%s|", s1,s2,s4,s3,s5);
NTesla 1:72bcbf11c621 252 #endif
NTesla 1:72bcbf11c621 253 #if (!PS_MODE)
NTesla 0:33061e64e773 254 BT.printf("%s;%s;%s;%s|", s1,s2,s4,s3);
NTesla 0:33061e64e773 255 #endif
NTesla 0:33061e64e773 256 }
NTesla 0:33061e64e773 257 }
NTesla 1:72bcbf11c621 258 #endif
NTesla 1:72bcbf11c621 259 #if (DA_PS_Op || AA_PS_Op)
NTesla 0:33061e64e773 260 //increment of measurement: avoids the redundancy of the display on the server
NTesla 0:33061e64e773 261 cptmesure++;
NTesla 1:72bcbf11c621 262 if(cptmesure == 8) cptmesure = 0;
NTesla 0:33061e64e773 263
NTesla 1:72bcbf11c621 264 trame2 = (acc_x & 0xFF00) >> 8; // xxxx xxxx xxxx xxxx -> xxxx xxxx 0000 0000 -> 0000 0000 xxxx xxxx
NTesla 1:72bcbf11c621 265 trame3 = (acc_x & 0xFF); // xxxx xxxx xxxx xxxx -> 0000 0000 xxxx xxxx
NTesla 1:72bcbf11c621 266 trame4 = (acc_y & 0xFF00) >> 8; // same trame2
NTesla 1:72bcbf11c621 267 trame5 = (acc_y & 0xFF); // same trame3
NTesla 1:72bcbf11c621 268 trame6 = (acc_z & 0xFF00) >> 8; // same trame2
NTesla 1:72bcbf11c621 269 trame7 = (acc_z & 0xFF); // same trame3
NTesla 0:33061e64e773 270
NTesla 1:72bcbf11c621 271 verif = (trame2 << 3) + cptmesure; // xxxx xxxx -> xxx xxxx x000 -> xxx xxxx xccc
NTesla 1:72bcbf11c621 272
NTesla 0:33061e64e773 273 //first frame: patient + verif (2 bits high)
NTesla 1:72bcbf11c621 274 trame1 = (patient << 4) + ((verif & 0x700) >> 7);// 0000 pppp -> pppp 0000 -> vvv vvvv vvvv -> vvv 0000 0000 -> 0000 0vvv -> pppp vvv0
NTesla 0:33061e64e773 275
NTesla 1:72bcbf11c621 276 trame8 = (verif & 0xFF);// vvv vvvv vvvv -> vvvv vvvv mask 1111 1111
NTesla 0:33061e64e773 277
NTesla 0:33061e64e773 278 //fifth frame: patient + increment measurement
NTesla 1:72bcbf11c621 279 trame9 = (patient << 4) + (cptmesure << 1); // 0000 pppp -> pppp 0000 -> 0000 0ccc -> 0000 ccc0 -> pppp ccc0
NTesla 0:33061e64e773 280
NTesla 1:72bcbf11c621 281 /* IMPORTANT TO UNDERSTAND (ONLY FOR NUCLEO)
NTesla 0:33061e64e773 282 TrameTab[0] = 255;
NTesla 0:33061e64e773 283 TrameTab[1] = trame1;
NTesla 0:33061e64e773 284 TrameTab[2] = trame2;
NTesla 0:33061e64e773 285 TrameTab[3] = trame3;
NTesla 0:33061e64e773 286 TrameTab[4] = trame8;
NTesla 0:33061e64e773 287 TrameTab[5] = trame9;
NTesla 0:33061e64e773 288 //Serial2.write(TrameTab,6,0,0);
NTesla 1:72bcbf11c621 289 //IF we will use write() then sketch will stuck after 166 seconds. putc() working same as write().
NTesla 0:33061e64e773 290 */
NTesla 0:33061e64e773 291 Serial2.putc(255);
NTesla 0:33061e64e773 292 Serial2.putc(trame1);
NTesla 0:33061e64e773 293 Serial2.putc(trame2);
NTesla 0:33061e64e773 294 Serial2.putc(trame3);
NTesla 0:33061e64e773 295 Serial2.putc(trame4);
NTesla 0:33061e64e773 296 Serial2.putc(trame5);
NTesla 0:33061e64e773 297 Serial2.putc(trame6);
NTesla 0:33061e64e773 298 Serial2.putc(trame7);
NTesla 0:33061e64e773 299 #if (PS_MODE)
NTesla 1:72bcbf11c621 300 Serial2.putc((uint8_t)PulseOK);
NTesla 0:33061e64e773 301 #endif
NTesla 0:33061e64e773 302 Serial2.putc(trame8);
NTesla 0:33061e64e773 303 Serial2.putc(trame9);
NTesla 0:33061e64e773 304 #if (!PS_MODE)
NTesla 0:33061e64e773 305 switch(BAUD_RATE)
NTesla 0:33061e64e773 306 {
NTesla 0:33061e64e773 307 case 4800 :
NTesla 0:33061e64e773 308 //wait_us(20000);
NTesla 0:33061e64e773 309 wait_us(41666.66);
NTesla 0:33061e64e773 310 wait_us(3200);
NTesla 0:33061e64e773 311 break;
NTesla 0:33061e64e773 312 case 9600 :
NTesla 0:33061e64e773 313 wait_us(20833.33);
NTesla 0:33061e64e773 314 wait_us(1100);
NTesla 0:33061e64e773 315 break;
NTesla 0:33061e64e773 316 case 19200 :
NTesla 0:33061e64e773 317 wait_us(10416.66);
NTesla 0:33061e64e773 318 wait_us(200);
NTesla 0:33061e64e773 319 break;
NTesla 0:33061e64e773 320 case 38400 :
NTesla 0:33061e64e773 321 wait_us(4836.6);//data transfer compensation -351.7us for 38400 baud and 5208.3us delay
NTesla 0:33061e64e773 322 //for using the same resistor that we use for optical ECG we should save the equation T_delay = 2*T_transmission
NTesla 0:33061e64e773 323 break;
NTesla 0:33061e64e773 324 default :
NTesla 0:33061e64e773 325 wait_ms(50);
NTesla 0:33061e64e773 326 }
NTesla 0:33061e64e773 327 #endif
NTesla 1:72bcbf11c621 328
NTesla 0:33061e64e773 329 #if (PS_MODE)
NTesla 0:33061e64e773 330 switch(BAUD_RATE)
NTesla 0:33061e64e773 331 {
NTesla 0:33061e64e773 332 case 4800 :
NTesla 0:33061e64e773 333 //wait_us(20000);
NTesla 0:33061e64e773 334 wait_us(41666.66 + 4166.66);
NTesla 0:33061e64e773 335 wait_us(3200 + 320);
NTesla 0:33061e64e773 336 break;
NTesla 0:33061e64e773 337 case 9600 :
NTesla 0:33061e64e773 338 wait_us(20833.33 + 2083.33);
NTesla 0:33061e64e773 339 wait_us(1100 + 110);
NTesla 0:33061e64e773 340 break;
NTesla 0:33061e64e773 341 case 19200 :
NTesla 0:33061e64e773 342 wait_us(10416.66 + 1041.66);
NTesla 0:33061e64e773 343 wait_us(200 + 20);
NTesla 0:33061e64e773 344 break;
NTesla 0:33061e64e773 345 case 38400 :
NTesla 0:33061e64e773 346 wait_us(4836.6 + 520.83);//data transfer compensation -351.7us for 38400 baud and 5208.3us delay
NTesla 0:33061e64e773 347 //for using the same resistor that we use for optical ECG we should save the equation T_delay = 2*T_transmission
NTesla 0:33061e64e773 348 break;
NTesla 0:33061e64e773 349 default :
NTesla 0:33061e64e773 350 wait_ms(50);
NTesla 0:33061e64e773 351 }
NTesla 0:33061e64e773 352 #endif
NTesla 0:33061e64e773 353 #endif
NTesla 0:33061e64e773 354 }
NTesla 0:33061e64e773 355
NTesla 0:33061e64e773 356 int main()
NTesla 0:33061e64e773 357 {
NTesla 0:33061e64e773 358 setup();
NTesla 1:72bcbf11c621 359 #if (AA_PS_BT || DA_PS_BT)
NTesla 1:72bcbf11c621 360 t.start();
NTesla 1:72bcbf11c621 361 Last = t.read_us();
NTesla 1:72bcbf11c621 362 coun=0;
NTesla 1:72bcbf11c621 363 //count3=0;
NTesla 1:72bcbf11c621 364 #endif
NTesla 0:33061e64e773 365
NTesla 0:33061e64e773 366 while (true)
NTesla 0:33061e64e773 367 {
NTesla 1:72bcbf11c621 368 #if (PS_MODE)
NTesla 1:72bcbf11c621 369 pulse();
NTesla 1:72bcbf11c621 370 #endif
NTesla 0:33061e64e773 371 #if (AA_PS_BT || DA_PS_BT) //bluetooth mode
NTesla 0:33061e64e773 372 Now = t.read_us();
NTesla 0:33061e64e773 373 delta = (float)(Now-Last)/1000000.0f;
NTesla 0:33061e64e773 374 if (delta>=0.1f && START==true)
NTesla 0:33061e64e773 375 {
NTesla 0:33061e64e773 376 Last=Now;
NTesla 0:33061e64e773 377 coun+=1;
NTesla 0:33061e64e773 378 loop(); //Get sensor values
NTesla 0:33061e64e773 379 }
NTesla 0:33061e64e773 380 if (BT.readable())
NTesla 0:33061e64e773 381 {
NTesla 0:33061e64e773 382 char c = BT.getc();
NTesla 0:33061e64e773 383 if(c == '1'){
NTesla 0:33061e64e773 384 START=true;
NTesla 0:33061e64e773 385 }
NTesla 0:33061e64e773 386 if(c == '0')
NTesla 0:33061e64e773 387 {
NTesla 0:33061e64e773 388 START=false;
NTesla 0:33061e64e773 389 myled=1;
NTesla 0:33061e64e773 390 buzz.write(0.50f);
NTesla 0:33061e64e773 391 wait(3);
NTesla 0:33061e64e773 392 buzz.write(0.0f);
NTesla 0:33061e64e773 393 }
NTesla 0:33061e64e773 394 }
NTesla 1:72bcbf11c621 395 #endif
NTesla 1:72bcbf11c621 396 #if(DA_PS_Op || AA_PS_Op)
NTesla 1:72bcbf11c621 397 loop();//optical
NTesla 0:33061e64e773 398 #endif
NTesla 0:33061e64e773 399 }
NTesla 0:33061e64e773 400 }
NTesla 0:33061e64e773 401