An mbed health monitor
Dependencies: 4DGL-uLCD-SE GP-20U7 PinDetect RPCInterface mbed
main.cpp@0:0de3867984e5, 2016-12-11 (annotated)
- 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?
User | Revision | Line number | New 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 | } |