An mbed health monitor

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

main.cpp

Committer:
dnergui3
Date:
2016-12-11
Revision:
0:0de3867984e5
Child:
1:ad5378dcef79

File content as of revision 0:0de3867984e5:

#include "mbed.h"
#include "LSM9DS1.h"
#include "GPS.h"
#include "GPSstuff.h"
#include <time.h>
#include <stdio.h> 

Serial pc(USBTX, USBRX);
GPS gps(p13, p14);
GPSstuff object;
LSM9DS1 IMU(p9, p10, 0xD6, 0x3C);

float a, ax, ay, az; //acceleration
int steps=0, i=0, step_num;
bool flag=0;
    
double buffer[4], speed, dist_travel=0, distance, totalDistance=0, threshold=1.1, time_elapsed=0;

int getsteps(){
    while(!IMU.accelAvailable());
        IMU.readAccel();
        ax=IMU.calcAccel(IMU.ax);
        ay=IMU.calcAccel(IMU.ay);
        az=IMU.calcAccel(IMU.az);
        a=sqrt(pow(ax, 2) + pow(ay, 2) + pow(az, 2));
        pc.printf("a: %d", a);
        if (a>=threshold && flag==0){ // if it crosses threshold increment step by one and raise the flag
            steps++; flag=1; 
            pc.printf("steps: %i", steps);
        } 

        else if (a < threshold && flag==1){ // if flag is raised and threshold is not crossed , put that flag down.
            flag=0;
        }
        return steps;
}
    
double getdistance(){
    if (i==0){
        //initial reading made by the GPS
        gps.sample();
        buffer[i]= gps.longitude;
        buffer[i+1] = gps.latitude;
        i=i+2;
//        pc.printf("First reading taken \n");
        if (buffer[2]==0 && buffer[3]==0){
            //second reading made by GPS
            gps.sample();
            buffer[2]= gps.longitude;
            buffer[3] = gps.latitude;
            i=2;
            }
    }
        else if (i==2){
            float lat1d = buffer[0];
            float lon1d = buffer[1];
            float lat2d = buffer[2];
            float lon2d = buffer[3];
            distance = object.distanceEarth(lat1d, lon1d, lat2d, lon2d);

//            pc.putc(totalDistance);
//            pc.putc(time_passed);
            //pc.printf("Distance travelled: %f km", totalDistance);
            //pc.printf("\n Distance travelled: %f miles", totalDistance * 0.621371);

            lat1d = buffer[2];
            lon1d = buffer[3];
            i=0;
        }
        return distance;
}


int main()
{
    IMU.begin();
    if (!IMU.begin()) {
        pc.printf("Failed to communicate with LSM9DS1.\n");
    }
    IMU.calibrate(1);
    clock_t start = clock();
    dist_travel=getdistance();
    totalDistance+=dist_travel;   

    while(1) {
       step_num=getsteps();
       dist_travel=getdistance();
       clock_t end = clock();
       time_elapsed=end-start;
       totalDistance+=dist_travel;
       pc.printf("Distance travelled: %f km\n\rTime elapsed: %f s", totalDistance, time_elapsed/1000); 
       clock_t start = clock(); 
    }   
}