An mbed health monitor

Dependencies:   4DGL-uLCD-SE GP-20U7 PinDetect RPCInterface mbed

Committer:
dnergui3
Date:
Sun Dec 11 22:58:51 2016 +0000
Revision:
0:0de3867984e5
Child:
1:ad5378dcef79
An mbed health monitor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dnergui3 0:0de3867984e5 1 #include "mbed.h"
dnergui3 0:0de3867984e5 2 #include "LSM9DS1.h"
dnergui3 0:0de3867984e5 3 #include "GPS.h"
dnergui3 0:0de3867984e5 4 #include "GPSstuff.h"
dnergui3 0:0de3867984e5 5 #include <time.h>
dnergui3 0:0de3867984e5 6 #include <stdio.h>
dnergui3 0:0de3867984e5 7
dnergui3 0:0de3867984e5 8 Serial pc(USBTX, USBRX);
dnergui3 0:0de3867984e5 9 GPS gps(p13, p14);
dnergui3 0:0de3867984e5 10 GPSstuff object;
dnergui3 0:0de3867984e5 11 LSM9DS1 IMU(p9, p10, 0xD6, 0x3C);
dnergui3 0:0de3867984e5 12
dnergui3 0:0de3867984e5 13 float a, ax, ay, az; //acceleration
dnergui3 0:0de3867984e5 14 int steps=0, i=0, step_num;
dnergui3 0:0de3867984e5 15 bool flag=0;
dnergui3 0:0de3867984e5 16
dnergui3 0:0de3867984e5 17 double buffer[4], speed, dist_travel=0, distance, totalDistance=0, threshold=1.1, time_elapsed=0;
dnergui3 0:0de3867984e5 18
dnergui3 0:0de3867984e5 19 int getsteps(){
dnergui3 0:0de3867984e5 20 while(!IMU.accelAvailable());
dnergui3 0:0de3867984e5 21 IMU.readAccel();
dnergui3 0:0de3867984e5 22 ax=IMU.calcAccel(IMU.ax);
dnergui3 0:0de3867984e5 23 ay=IMU.calcAccel(IMU.ay);
dnergui3 0:0de3867984e5 24 az=IMU.calcAccel(IMU.az);
dnergui3 0:0de3867984e5 25 a=sqrt(pow(ax, 2) + pow(ay, 2) + pow(az, 2));
dnergui3 0:0de3867984e5 26 pc.printf("a: %d", a);
dnergui3 0:0de3867984e5 27 if (a>=threshold && flag==0){ // if it crosses threshold increment step by one and raise the flag
dnergui3 0:0de3867984e5 28 steps++; flag=1;
dnergui3 0:0de3867984e5 29 pc.printf("steps: %i", steps);
dnergui3 0:0de3867984e5 30 }
dnergui3 0:0de3867984e5 31
dnergui3 0:0de3867984e5 32 else if (a < threshold && flag==1){ // if flag is raised and threshold is not crossed , put that flag down.
dnergui3 0:0de3867984e5 33 flag=0;
dnergui3 0:0de3867984e5 34 }
dnergui3 0:0de3867984e5 35 return steps;
dnergui3 0:0de3867984e5 36 }
dnergui3 0:0de3867984e5 37
dnergui3 0:0de3867984e5 38 double getdistance(){
dnergui3 0:0de3867984e5 39 if (i==0){
dnergui3 0:0de3867984e5 40 //initial reading made by the GPS
dnergui3 0:0de3867984e5 41 gps.sample();
dnergui3 0:0de3867984e5 42 buffer[i]= gps.longitude;
dnergui3 0:0de3867984e5 43 buffer[i+1] = gps.latitude;
dnergui3 0:0de3867984e5 44 i=i+2;
dnergui3 0:0de3867984e5 45 // pc.printf("First reading taken \n");
dnergui3 0:0de3867984e5 46 if (buffer[2]==0 && buffer[3]==0){
dnergui3 0:0de3867984e5 47 //second reading made by GPS
dnergui3 0:0de3867984e5 48 gps.sample();
dnergui3 0:0de3867984e5 49 buffer[2]= gps.longitude;
dnergui3 0:0de3867984e5 50 buffer[3] = gps.latitude;
dnergui3 0:0de3867984e5 51 i=2;
dnergui3 0:0de3867984e5 52 }
dnergui3 0:0de3867984e5 53 }
dnergui3 0:0de3867984e5 54 else if (i==2){
dnergui3 0:0de3867984e5 55 float lat1d = buffer[0];
dnergui3 0:0de3867984e5 56 float lon1d = buffer[1];
dnergui3 0:0de3867984e5 57 float lat2d = buffer[2];
dnergui3 0:0de3867984e5 58 float lon2d = buffer[3];
dnergui3 0:0de3867984e5 59 distance = object.distanceEarth(lat1d, lon1d, lat2d, lon2d);
dnergui3 0:0de3867984e5 60
dnergui3 0:0de3867984e5 61 // pc.putc(totalDistance);
dnergui3 0:0de3867984e5 62 // pc.putc(time_passed);
dnergui3 0:0de3867984e5 63 //pc.printf("Distance travelled: %f km", totalDistance);
dnergui3 0:0de3867984e5 64 //pc.printf("\n Distance travelled: %f miles", totalDistance * 0.621371);
dnergui3 0:0de3867984e5 65
dnergui3 0:0de3867984e5 66 lat1d = buffer[2];
dnergui3 0:0de3867984e5 67 lon1d = buffer[3];
dnergui3 0:0de3867984e5 68 i=0;
dnergui3 0:0de3867984e5 69 }
dnergui3 0:0de3867984e5 70 return distance;
dnergui3 0:0de3867984e5 71 }
dnergui3 0:0de3867984e5 72
dnergui3 0:0de3867984e5 73
dnergui3 0:0de3867984e5 74 int main()
dnergui3 0:0de3867984e5 75 {
dnergui3 0:0de3867984e5 76 IMU.begin();
dnergui3 0:0de3867984e5 77 if (!IMU.begin()) {
dnergui3 0:0de3867984e5 78 pc.printf("Failed to communicate with LSM9DS1.\n");
dnergui3 0:0de3867984e5 79 }
dnergui3 0:0de3867984e5 80 IMU.calibrate(1);
dnergui3 0:0de3867984e5 81 clock_t start = clock();
dnergui3 0:0de3867984e5 82 dist_travel=getdistance();
dnergui3 0:0de3867984e5 83 totalDistance+=dist_travel;
dnergui3 0:0de3867984e5 84
dnergui3 0:0de3867984e5 85 while(1) {
dnergui3 0:0de3867984e5 86 step_num=getsteps();
dnergui3 0:0de3867984e5 87 dist_travel=getdistance();
dnergui3 0:0de3867984e5 88 clock_t end = clock();
dnergui3 0:0de3867984e5 89 time_elapsed=end-start;
dnergui3 0:0de3867984e5 90 totalDistance+=dist_travel;
dnergui3 0:0de3867984e5 91 pc.printf("Distance travelled: %f km\n\rTime elapsed: %f s", totalDistance, time_elapsed/1000);
dnergui3 0:0de3867984e5 92 clock_t start = clock();
dnergui3 0:0de3867984e5 93 }
dnergui3 0:0de3867984e5 94 }