ECE56810 Project 2 - Runner's Monitor

Dependencies:   mbed rohm-bh1790glc-driver mbed-http FXAS21000 FXOS8700Q ESP8266 RegisterWriter

Committer:
ndnafzig
Date:
Fri Apr 29 16:52:11 2022 +0000
Revision:
12:2dde21ae53c4
Parent:
11:756321f0b0cd
Standard

Who changed what in which revision?

UserRevisionLine numberNew contents of line
andcor02 8:25138f7b9309 1 #include "mbed.h"
andcor02 8:25138f7b9309 2 #include "hcsr04.h"
jamiedillion2019 10:e4b6bc6d9b07 3 #include "ESP8266.h"
jamiedillion2019 10:e4b6bc6d9b07 4 #include "math.h"
ndnafzig 12:2dde21ae53c4 5 #include "FXOS8700Q.h"
ndnafzig 12:2dde21ae53c4 6 #include "FXAS21000.h"
ndnafzig 12:2dde21ae53c4 7 #include "RegisterWriter/RegisterWriter/rohm_hal2.h"
ndnafzig 12:2dde21ae53c4 8 #include "rohm-bh1790glc-driver/bh1790glc_registers.h"
ndnafzig 12:2dde21ae53c4 9 #include "rohm-bh1790glc-driver/bh1790glc.h"
andcor02 8:25138f7b9309 10
ndnafzig 12:2dde21ae53c4 11 #define CloudIP "184.106.153.149" //Raw IP Address of ThingSpeak Cloud Server
ndnafzig 12:2dde21ae53c4 12 #define SSID "SSID"
ndnafzig 12:2dde21ae53c4 13 #define Password "Password"
ndnafzig 12:2dde21ae53c4 14
ndnafzig 12:2dde21ae53c4 15 HCSR04 usensor1(D10,D11); //ECHO Pin=D11, TRIG Pin=D10
jamiedillion2019 10:e4b6bc6d9b07 16 Serial pc(USBTX,USBRX); //Serial Communication with PC
jamiedillion2019 10:e4b6bc6d9b07 17 ESP8266 wifi(PTC17, PTC16, 115200); //Tx Pin:PTC17; Rx Pin:PTC17; Baud rate:115200
jamiedillion2019 10:e4b6bc6d9b07 18
ndnafzig 12:2dde21ae53c4 19 I2C i2c(PTE25, PTE24);
ndnafzig 12:2dde21ae53c4 20 FXOS8700QAccelerometer acc(i2c, FXOS8700CQ_SLAVE_ADDR1); // Configured for the FRDM-K64F with onboard sensors
ndnafzig 12:2dde21ae53c4 21 FXOS8700QMagnetometer mag(i2c, FXOS8700CQ_SLAVE_ADDR1);
ndnafzig 12:2dde21ae53c4 22 FXAS21000 gyro(D14,D15);
ndnafzig 12:2dde21ae53c4 23
ndnafzig 12:2dde21ae53c4 24 I2C i2chm(I2C_SDA, I2C_SCL);
ndnafzig 12:2dde21ae53c4 25 RegisterWriter i2c_rw(i2chm);
ndnafzig 12:2dde21ae53c4 26 BH1790GLC bh1790glc(i2c_rw);
ndnafzig 12:2dde21ae53c4 27
ndnafzig 12:2dde21ae53c4 28 DigitalOut buzzer(D7);
ndnafzig 12:2dde21ae53c4 29
ndnafzig 12:2dde21ae53c4 30 int on = 1, off = 0;
ndnafzig 12:2dde21ae53c4 31
ndnafzig 12:2dde21ae53c4 32 void wifi_send(void); //Connect and Push Data Channel to Cloud Server
ndnafzig 12:2dde21ae53c4 33 void US_Sensor(void); //Take ultrasonic measurement and send to cloud
ndnafzig 12:2dde21ae53c4 34 void Acc_Mag_Gyro(void); //Take measurements from acceleromter, magnetometer, and gyroscope and send to cloud
ndnafzig 12:2dde21ae53c4 35 void Heart_Monitor(void);
jamiedillion2019 10:e4b6bc6d9b07 36
jamiedillion2019 10:e4b6bc6d9b07 37 int num = 0;
ndnafzig 12:2dde21ae53c4 38 char snd[255],rcv[1000]; //snd: send command to ESP8266, rcv: receive response from ESP8266
ndnafzig 12:2dde21ae53c4 39
ndnafzig 12:2dde21ae53c4 40 //Ultrasonic sensor variable
ndnafzig 12:2dde21ae53c4 41 int distance1 = 100;
ndnafzig 12:2dde21ae53c4 42
ndnafzig 12:2dde21ae53c4 43 //acc, mag, and gryo variables
ndnafzig 12:2dde21ae53c4 44 float gyro_data[3];
ndnafzig 12:2dde21ae53c4 45 motion_data_units_t acc_data, mag_data;
ndnafzig 12:2dde21ae53c4 46 motion_data_counts_t acc_raw, mag_raw;
ndnafzig 12:2dde21ae53c4 47 float faX, faY, faZ, fmX, fmY, fmZ, tmp_float;
ndnafzig 12:2dde21ae53c4 48 int16_t raX, raY, raZ, rmX, rmY, rmZ, tmp_int;
ndnafzig 12:2dde21ae53c4 49
ndnafzig 12:2dde21ae53c4 50 //heart monitor variables
ndnafzig 12:2dde21ae53c4 51 bool interval_elapsed;
ndnafzig 12:2dde21ae53c4 52 Ticker ticker;
ndnafzig 12:2dde21ae53c4 53 uint16_t data[2];
ndnafzig 12:2dde21ae53c4 54
ndnafzig 12:2dde21ae53c4 55 void timer_isr()
ndnafzig 12:2dde21ae53c4 56 {
ndnafzig 12:2dde21ae53c4 57 interval_elapsed = true;
ndnafzig 12:2dde21ae53c4 58 }
jakobjohn949 9:607ee6e92552 59
andcor02 8:25138f7b9309 60 int main()
andcor02 8:25138f7b9309 61 {
ndnafzig 12:2dde21ae53c4 62 buzzer = off;
jamiedillion2019 10:e4b6bc6d9b07 63 pc.baud(115200); //Baud Rate of 115200 for Tera Term
jamiedillion2019 10:e4b6bc6d9b07 64
ndnafzig 12:2dde21ae53c4 65 acc.enable();
ndnafzig 12:2dde21ae53c4 66 mag.enable();
ndnafzig 12:2dde21ae53c4 67
ndnafzig 12:2dde21ae53c4 68 pc.baud(115200);
ndnafzig 12:2dde21ae53c4 69 i2c.frequency(400000);
ndnafzig 12:2dde21ae53c4 70
ndnafzig 12:2dde21ae53c4 71 int error;
ndnafzig 12:2dde21ae53c4 72
ndnafzig 12:2dde21ae53c4 73 wait(0.1);
ndnafzig 12:2dde21ae53c4 74
ndnafzig 12:2dde21ae53c4 75 do
ndnafzig 12:2dde21ae53c4 76 { //until init OK.
ndnafzig 12:2dde21ae53c4 77 error = bh1790glc.set_default_on();
ndnafzig 12:2dde21ae53c4 78 wait_ms(500);
ndnafzig 12:2dde21ae53c4 79 wait_ms(200);
ndnafzig 12:2dde21ae53c4 80 }
ndnafzig 12:2dde21ae53c4 81 while (error);
ndnafzig 12:2dde21ae53c4 82
ndnafzig 12:2dde21ae53c4 83 bh1790glc.set_default_on();
ndnafzig 12:2dde21ae53c4 84
ndnafzig 12:2dde21ae53c4 85 interval_elapsed = false;
ndnafzig 12:2dde21ae53c4 86 ticker.attach(&timer_isr, 0.03125); //32Hz
jamiedillion2019 10:e4b6bc6d9b07 87
jamiedillion2019 10:e4b6bc6d9b07 88 pc.printf("Initial Setup\r\n");
jamiedillion2019 10:e4b6bc6d9b07 89 wifi.SetMode(1); //Set ESP mode to 1
jamiedillion2019 10:e4b6bc6d9b07 90 wifi.RcvReply(rcv, 1000); //Receive a response from ESP
jamiedillion2019 10:e4b6bc6d9b07 91 pc.printf("%s\r", rcv);
jamiedillion2019 10:e4b6bc6d9b07 92
jamiedillion2019 10:e4b6bc6d9b07 93 pc.printf("Connecting to WiFi\r\n"); //AP Setup Initialization
ndnafzig 12:2dde21ae53c4 94 wifi.Join(SSID, Password); //Put your Wifi SSID followed by Password
jamiedillion2019 10:e4b6bc6d9b07 95 wifi.RcvReply(rcv, 1000);
jamiedillion2019 10:e4b6bc6d9b07 96 pc.printf("%s\n", rcv);
ndnafzig 12:2dde21ae53c4 97 wait(2);
jamiedillion2019 10:e4b6bc6d9b07 98
jamiedillion2019 10:e4b6bc6d9b07 99 wifi.GetIP(rcv); //Obtains an IP address from the AP
jamiedillion2019 10:e4b6bc6d9b07 100
jamiedillion2019 10:e4b6bc6d9b07 101 while (1)
jamiedillion2019 10:e4b6bc6d9b07 102 {
jamiedillion2019 10:e4b6bc6d9b07 103 wifi_send();
jamiedillion2019 10:e4b6bc6d9b07 104
ndnafzig 12:2dde21ae53c4 105 wait(1.0f);
jamiedillion2019 10:e4b6bc6d9b07 106 }
jamiedillion2019 10:e4b6bc6d9b07 107 }
jamiedillion2019 10:e4b6bc6d9b07 108
jamiedillion2019 10:e4b6bc6d9b07 109 void wifi_send(void)
jamiedillion2019 10:e4b6bc6d9b07 110 {
jamiedillion2019 10:e4b6bc6d9b07 111 while(num<1000000000000)
jamiedillion2019 10:e4b6bc6d9b07 112 {
jamiedillion2019 10:e4b6bc6d9b07 113 num=num+1;
ndnafzig 12:2dde21ae53c4 114 pc.printf("\nSyncing to Thingspeak #: %d\n\r", num);
ndnafzig 12:2dde21ae53c4 115
ndnafzig 12:2dde21ae53c4 116 US_Sensor();
ndnafzig 12:2dde21ae53c4 117
ndnafzig 12:2dde21ae53c4 118 Acc_Mag_Gyro();
jamiedillion2019 10:e4b6bc6d9b07 119
ndnafzig 12:2dde21ae53c4 120 Heart_Monitor();
ndnafzig 12:2dde21ae53c4 121 }
ndnafzig 12:2dde21ae53c4 122 }
ndnafzig 12:2dde21ae53c4 123
ndnafzig 12:2dde21ae53c4 124 void US_Sensor(void)
ndnafzig 12:2dde21ae53c4 125 {
jamiedillion2019 10:e4b6bc6d9b07 126 //Ultrasound Sensor (HC-SR04) #1 Initialization
ndnafzig 12:2dde21ae53c4 127 usensor1.start();
ndnafzig 12:2dde21ae53c4 128 wait_ms(100);
jakobjohn949 9:607ee6e92552 129
jamiedillion2019 10:e4b6bc6d9b07 130 //Calculating Distance Percentage Remaining for Sensor # 1
ndnafzig 12:2dde21ae53c4 131 distance1 = usensor1.get_dist_cm();
jamiedillion2019 10:e4b6bc6d9b07 132
jamiedillion2019 10:e4b6bc6d9b07 133 //Sending Data to the Cloud Server via ESP8266 WiFi Module
ndnafzig 12:2dde21ae53c4 134 strcpy(snd,"AT+CIPMUX=0\n\r"); //AT+CIPMUX: Enabling Single Channel Mode
ndnafzig 12:2dde21ae53c4 135 wifi.SendCMD(snd);
ndnafzig 12:2dde21ae53c4 136 wait(0.1);
ndnafzig 12:2dde21ae53c4 137 wifi.RcvReply(rcv, 1000);
ndnafzig 12:2dde21ae53c4 138 wait(0.1);
jamiedillion2019 10:e4b6bc6d9b07 139
jamiedillion2019 10:e4b6bc6d9b07 140 //Establish TCP connection w/ Cloud Server
ndnafzig 12:2dde21ae53c4 141 sprintf(snd,"AT+CIPSTART=4,\"TCP\",\"%s\",80\n",CloudIP);
ndnafzig 12:2dde21ae53c4 142 wait(0.1);
ndnafzig 12:2dde21ae53c4 143 wifi.RcvReply(rcv, 1000);
ndnafzig 12:2dde21ae53c4 144 wait(0.1);
ndnafzig 12:2dde21ae53c4 145
ndnafzig 12:2dde21ae53c4 146 //Set length of the data that will be sent
ndnafzig 12:2dde21ae53c4 147 strcpy(snd,"AT+CIPSEND=100\n\r");
ndnafzig 12:2dde21ae53c4 148 wifi.SendCMD(snd);
ndnafzig 12:2dde21ae53c4 149 pc.printf("%s\r", rcv);
ndnafzig 12:2dde21ae53c4 150 wait(0.1);
ndnafzig 12:2dde21ae53c4 151 wifi.RcvReply(rcv, 1000);
ndnafzig 12:2dde21ae53c4 152 pc.printf("%s\r", rcv);
ndnafzig 12:2dde21ae53c4 153 wait(0.1);
ndnafzig 12:2dde21ae53c4 154
ndnafzig 12:2dde21ae53c4 155 //Pushing the data acquired from HC-SR04 Ultrasonic Sensor to Cloud Server via API
ndnafzig 12:2dde21ae53c4 156 sprintf(snd,"\rhttps://api.thingspeak.com/update?api_key=MR7SIH7MSC5KIIH0&field1=%d\r", distance1);
ndnafzig 12:2dde21ae53c4 157 printf("Distance from Object: %dcm\n\r", distance1);
ndnafzig 12:2dde21ae53c4 158
ndnafzig 12:2dde21ae53c4 159
ndnafzig 12:2dde21ae53c4 160
ndnafzig 12:2dde21ae53c4 161 if(distance1 < 6)
ndnafzig 12:2dde21ae53c4 162 {
ndnafzig 12:2dde21ae53c4 163 buzzer = on;
ndnafzig 12:2dde21ae53c4 164 wait(.3);
ndnafzig 12:2dde21ae53c4 165 buzzer = off;
ndnafzig 12:2dde21ae53c4 166 wait(0.3);
ndnafzig 12:2dde21ae53c4 167 buzzer = on;
ndnafzig 12:2dde21ae53c4 168 wait(0.3);
ndnafzig 12:2dde21ae53c4 169 buzzer = off;
ndnafzig 12:2dde21ae53c4 170 wait(0.3);
ndnafzig 12:2dde21ae53c4 171 buzzer = on;
ndnafzig 12:2dde21ae53c4 172 wait(0.3);
ndnafzig 12:2dde21ae53c4 173 buzzer = off;
ndnafzig 12:2dde21ae53c4 174 }
ndnafzig 12:2dde21ae53c4 175
ndnafzig 12:2dde21ae53c4 176 wifi.SendCMD(snd);
ndnafzig 12:2dde21ae53c4 177 pc.printf("%s\r",snd);
ndnafzig 12:2dde21ae53c4 178 wait(0.1);
ndnafzig 12:2dde21ae53c4 179 wifi.RcvReply(rcv, 1000);
ndnafzig 12:2dde21ae53c4 180 pc.printf("%s\r", rcv);
ndnafzig 12:2dde21ae53c4 181 }
ndnafzig 12:2dde21ae53c4 182
ndnafzig 12:2dde21ae53c4 183 void Acc_Mag_Gyro(void)
ndnafzig 12:2dde21ae53c4 184 {
ndnafzig 12:2dde21ae53c4 185 //counts based results
ndnafzig 12:2dde21ae53c4 186 acc.getAxis(acc_raw);
ndnafzig 12:2dde21ae53c4 187 mag.getAxis(mag_raw);
ndnafzig 12:2dde21ae53c4 188 acc.getX(raX);
ndnafzig 12:2dde21ae53c4 189 acc.getY(raY);
ndnafzig 12:2dde21ae53c4 190 acc.getZ(raZ);
ndnafzig 12:2dde21ae53c4 191 mag.getX(rmX);
ndnafzig 12:2dde21ae53c4 192 mag.getY(rmY);
ndnafzig 12:2dde21ae53c4 193 mag.getZ(rmZ);
ndnafzig 12:2dde21ae53c4 194
ndnafzig 12:2dde21ae53c4 195 //unit based results
ndnafzig 12:2dde21ae53c4 196 acc.getAxis(acc_data);
ndnafzig 12:2dde21ae53c4 197 mag.getAxis(mag_data);
ndnafzig 12:2dde21ae53c4 198 acc.getX(faX);
ndnafzig 12:2dde21ae53c4 199 acc.getY(faY);
ndnafzig 12:2dde21ae53c4 200 acc.getZ(faZ);
ndnafzig 12:2dde21ae53c4 201 mag.getX(fmX);
ndnafzig 12:2dde21ae53c4 202 mag.getY(fmY);
ndnafzig 12:2dde21ae53c4 203 mag.getZ(fmZ);
ndnafzig 12:2dde21ae53c4 204 pc.printf("Acellerometer: X=%1.4fY=%1.4fZ=%1.4f\n\r", acc.getX(faX),acc.getY(faY),acc.getZ(faZ));
ndnafzig 12:2dde21ae53c4 205 pc.printf("Magnetometer: X=%4.1fY=%4.1fZ=%4.1f\n\r", mag.getX(fmX),mag.getY(fmY), mag.getZ(fmZ));
ndnafzig 12:2dde21ae53c4 206 gyro.ReadXYZ(gyro_data);
ndnafzig 12:2dde21ae53c4 207 pc.printf("Gyro: X=%6.2f Y=%6.2f Z=%6.2f\n\r", gyro_data[0],gyro_data[1], gyro_data[2]);
ndnafzig 12:2dde21ae53c4 208 wait(0.5f);
ndnafzig 12:2dde21ae53c4 209
ndnafzig 12:2dde21ae53c4 210 //Sending Data to the Cloud Server via ESP8266 WiFi Module
ndnafzig 12:2dde21ae53c4 211 strcpy(snd,"AT+CIPMUX=0\n\r"); //AT+CIPMUX: Enabling Single Channel Mode
ndnafzig 12:2dde21ae53c4 212 wifi.SendCMD(snd);
ndnafzig 12:2dde21ae53c4 213 wait(0.1);
ndnafzig 12:2dde21ae53c4 214 wifi.RcvReply(rcv, 1000);
ndnafzig 12:2dde21ae53c4 215 wait(0.1);
ndnafzig 12:2dde21ae53c4 216
ndnafzig 12:2dde21ae53c4 217 //Establish TCP connection w/ Cloud Server
ndnafzig 12:2dde21ae53c4 218 sprintf(snd,"AT+CIPSTART=4,\"TCP\",\"%s\",80\n",CloudIP);
ndnafzig 12:2dde21ae53c4 219 wait(0.1);
ndnafzig 12:2dde21ae53c4 220 wifi.RcvReply(rcv, 1000);
ndnafzig 12:2dde21ae53c4 221 wait(0.1);
jamiedillion2019 10:e4b6bc6d9b07 222
jamiedillion2019 10:e4b6bc6d9b07 223 //Set length of the data that will be sent
ndnafzig 12:2dde21ae53c4 224 strcpy(snd,"AT+CIPSEND=100\n\r");
ndnafzig 12:2dde21ae53c4 225 wifi.SendCMD(snd);
ndnafzig 12:2dde21ae53c4 226 pc.printf("%s\r", rcv);
ndnafzig 12:2dde21ae53c4 227 wait(0.1);
ndnafzig 12:2dde21ae53c4 228 wifi.RcvReply(rcv, 1000);
ndnafzig 12:2dde21ae53c4 229 pc.printf("%s\r", rcv);
ndnafzig 12:2dde21ae53c4 230 wait(0.1);
jamiedillion2019 10:e4b6bc6d9b07 231
ndnafzig 12:2dde21ae53c4 232 //Pushing the data acquired from Acc to Cloud Server via API
ndnafzig 12:2dde21ae53c4 233 //Sends only X data for simplicity of testing purposes
ndnafzig 12:2dde21ae53c4 234 sprintf(snd,"\rhttps://api.thingspeak.com/update?api_key=MR7SIH7MSC5KIIH0&field2=%f\r", acc.getX(faX));
ndnafzig 12:2dde21ae53c4 235 printf("Current X Acceleration: %f\n\r", acc.getX(faX));
ndnafzig 12:2dde21ae53c4 236 wifi.SendCMD(snd);
ndnafzig 12:2dde21ae53c4 237 pc.printf("%s\r",snd);
ndnafzig 12:2dde21ae53c4 238 wait(0.1);
ndnafzig 12:2dde21ae53c4 239 wifi.RcvReply(rcv, 1000);
ndnafzig 12:2dde21ae53c4 240 pc.printf("%s\r", rcv);
ndnafzig 12:2dde21ae53c4 241
ndnafzig 12:2dde21ae53c4 242 //Pushing the data acquired from Mag to Cloud Server via API
ndnafzig 12:2dde21ae53c4 243 //Sends only X data for simplicity of testing purposes
ndnafzig 12:2dde21ae53c4 244 sprintf(snd,"\rhttps://api.thingspeak.com/update?api_key=MR7SIH7MSC5KIIH0&field3=%f\r", mag.getX(fmX));
ndnafzig 12:2dde21ae53c4 245 printf("Current X Position: %f\n\r", mag.getX(fmX));
ndnafzig 12:2dde21ae53c4 246 wifi.SendCMD(snd);
ndnafzig 12:2dde21ae53c4 247 pc.printf("%s\r",snd);
ndnafzig 12:2dde21ae53c4 248 wait(0.1);
ndnafzig 12:2dde21ae53c4 249 wifi.RcvReply(rcv, 1000);
ndnafzig 12:2dde21ae53c4 250 pc.printf("%s\r", rcv);
ndnafzig 12:2dde21ae53c4 251
ndnafzig 12:2dde21ae53c4 252 //Pushing the data acquired from Gyro to Cloud Server via API
ndnafzig 12:2dde21ae53c4 253 //Sends only X data for simplicity of testing purposes
ndnafzig 12:2dde21ae53c4 254 sprintf(snd,"\rhttps://api.thingspeak.com/update?api_key=MR7SIH7MSC5KIIH0&field4=%f\r", gyro_data[0]);
ndnafzig 12:2dde21ae53c4 255 printf("Current X Orientation: %f\n\r", gyro_data[0]);
ndnafzig 12:2dde21ae53c4 256 wifi.SendCMD(snd);
ndnafzig 12:2dde21ae53c4 257 pc.printf("%s\r",snd);
ndnafzig 12:2dde21ae53c4 258 wait(0.1);
ndnafzig 12:2dde21ae53c4 259 wifi.RcvReply(rcv, 1000);
ndnafzig 12:2dde21ae53c4 260 pc.printf("%s\r", rcv);
ndnafzig 12:2dde21ae53c4 261 }
ndnafzig 12:2dde21ae53c4 262
ndnafzig 12:2dde21ae53c4 263 void Heart_Monitor(void)
ndnafzig 12:2dde21ae53c4 264 {
ndnafzig 12:2dde21ae53c4 265 int i = 0;
ndnafzig 12:2dde21ae53c4 266 int sum = 0;
ndnafzig 12:2dde21ae53c4 267 int count = 0;
ndnafzig 12:2dde21ae53c4 268 float average = 0;
ndnafzig 12:2dde21ae53c4 269 int error;
ndnafzig 12:2dde21ae53c4 270
ndnafzig 12:2dde21ae53c4 271 wait_ms(500);
ndnafzig 12:2dde21ae53c4 272
ndnafzig 12:2dde21ae53c4 273 while(i < 10)
ndnafzig 12:2dde21ae53c4 274 {
ndnafzig 12:2dde21ae53c4 275 if (interval_elapsed) //Wait until ISR
ndnafzig 12:2dde21ae53c4 276 {
ndnafzig 12:2dde21ae53c4 277 error = bh1790glc.getresults(data);
ndnafzig 12:2dde21ae53c4 278
ndnafzig 12:2dde21ae53c4 279 if (!error)
ndnafzig 12:2dde21ae53c4 280 {
ndnafzig 12:2dde21ae53c4 281 //get data, print to serial, update flags
ndnafzig 12:2dde21ae53c4 282 pc.printf("%d, \t%d\n\r", data[1], data[0]);
ndnafzig 12:2dde21ae53c4 283 interval_elapsed = false;
ndnafzig 12:2dde21ae53c4 284 i++;
ndnafzig 12:2dde21ae53c4 285 sum += data[1];
ndnafzig 12:2dde21ae53c4 286 count++;
ndnafzig 12:2dde21ae53c4 287 }
ndnafzig 12:2dde21ae53c4 288 }
ndnafzig 12:2dde21ae53c4 289 }
ndnafzig 12:2dde21ae53c4 290
ndnafzig 12:2dde21ae53c4 291 average = sum/10;
ndnafzig 12:2dde21ae53c4 292
ndnafzig 12:2dde21ae53c4 293 if(average > 3500)
ndnafzig 12:2dde21ae53c4 294 {
ndnafzig 12:2dde21ae53c4 295 buzzer = on;
ndnafzig 12:2dde21ae53c4 296 wait(.1);
ndnafzig 12:2dde21ae53c4 297 buzzer = off;
ndnafzig 12:2dde21ae53c4 298 wait(0.1);
ndnafzig 12:2dde21ae53c4 299 buzzer = on;
ndnafzig 12:2dde21ae53c4 300 wait(0.1);
ndnafzig 12:2dde21ae53c4 301 buzzer = off;
ndnafzig 12:2dde21ae53c4 302 wait(0.1);
ndnafzig 12:2dde21ae53c4 303 buzzer = on;
ndnafzig 12:2dde21ae53c4 304 wait(.1);
ndnafzig 12:2dde21ae53c4 305 buzzer = off;
ndnafzig 12:2dde21ae53c4 306 wait(0.1);
ndnafzig 12:2dde21ae53c4 307 buzzer = on;
ndnafzig 12:2dde21ae53c4 308 wait(0.1);
ndnafzig 12:2dde21ae53c4 309 buzzer = off;
ndnafzig 12:2dde21ae53c4 310 wait(0.1);
ndnafzig 12:2dde21ae53c4 311 buzzer = on;
ndnafzig 12:2dde21ae53c4 312 wait(.1);
ndnafzig 12:2dde21ae53c4 313 buzzer = off;
ndnafzig 12:2dde21ae53c4 314 wait(0.1);
ndnafzig 12:2dde21ae53c4 315 buzzer = on;
ndnafzig 12:2dde21ae53c4 316 wait(0.1);
ndnafzig 12:2dde21ae53c4 317 buzzer = off;
andcor02 8:25138f7b9309 318 }
ndnafzig 12:2dde21ae53c4 319
ndnafzig 12:2dde21ae53c4 320 //Sending Data to the Cloud Server via ESP8266 WiFi Module
ndnafzig 12:2dde21ae53c4 321 strcpy(snd,"AT+CIPMUX=0\n\r"); //AT+CIPMUX: Enabling Single Channel Mode
ndnafzig 12:2dde21ae53c4 322 wifi.SendCMD(snd);
ndnafzig 12:2dde21ae53c4 323 wait(0.1);
ndnafzig 12:2dde21ae53c4 324 wifi.RcvReply(rcv, 1000);
ndnafzig 12:2dde21ae53c4 325 wait(0.1);
ndnafzig 12:2dde21ae53c4 326
ndnafzig 12:2dde21ae53c4 327 //Establish TCP connection w/ Cloud Server
ndnafzig 12:2dde21ae53c4 328 sprintf(snd,"AT+CIPSTART=4,\"TCP\",\"%s\",80\n",CloudIP);
ndnafzig 12:2dde21ae53c4 329 wait(0.1);
ndnafzig 12:2dde21ae53c4 330 wifi.RcvReply(rcv, 1000);
ndnafzig 12:2dde21ae53c4 331 wait(0.1);
ndnafzig 12:2dde21ae53c4 332
ndnafzig 12:2dde21ae53c4 333 //Set length of the data that will be sent
ndnafzig 12:2dde21ae53c4 334 strcpy(snd,"AT+CIPSEND=100\n\r");
ndnafzig 12:2dde21ae53c4 335 wifi.SendCMD(snd);
ndnafzig 12:2dde21ae53c4 336 pc.printf("%s\r", rcv);
ndnafzig 12:2dde21ae53c4 337 wait(0.1);
ndnafzig 12:2dde21ae53c4 338 wifi.RcvReply(rcv, 1000);
ndnafzig 12:2dde21ae53c4 339 pc.printf("%s\r", rcv);
ndnafzig 12:2dde21ae53c4 340 wait(0.1);
ndnafzig 12:2dde21ae53c4 341
ndnafzig 12:2dde21ae53c4 342 //Pushing the data acquired from heart monitor to Cloud Server via API
ndnafzig 12:2dde21ae53c4 343 //Sends only X data for simplicity of testing purposes
ndnafzig 12:2dde21ae53c4 344 sprintf(snd,"\rhttps://api.thingspeak.com/update?api_key=MR7SIH7MSC5KIIH0&field5=%f\r", average);
ndnafzig 12:2dde21ae53c4 345 printf("Current average heart rate: %f\n\r", average);
ndnafzig 12:2dde21ae53c4 346 wifi.SendCMD(snd);
ndnafzig 12:2dde21ae53c4 347 pc.printf("%s\r",snd);
ndnafzig 12:2dde21ae53c4 348 wait(0.1);
ndnafzig 12:2dde21ae53c4 349 wifi.RcvReply(rcv, 1000);
ndnafzig 12:2dde21ae53c4 350 pc.printf("%s\r", rcv);
ndnafzig 12:2dde21ae53c4 351 }