v1
Dependencies: LSM9DS1_Library_cal mbed
Fork of LSM9DS1_Demo_wCal by
main.cpp@2:b21d96b985ab, 2017-03-14 (annotated)
- Committer:
- FrederickLemuel
- Date:
- Tue Mar 14 18:03:19 2017 +0000
- Revision:
- 2:b21d96b985ab
- Parent:
- 1:60606d35ed62
v1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
4180_1 | 0:e693d5bf0a25 | 1 | #include "mbed.h" |
4180_1 | 0:e693d5bf0a25 | 2 | #include "LSM9DS1.h" |
FrederickLemuel | 1:60606d35ed62 | 3 | #include <string> |
FrederickLemuel | 1:60606d35ed62 | 4 | #include <sstream> |
FrederickLemuel | 1:60606d35ed62 | 5 | |
FrederickLemuel | 1:60606d35ed62 | 6 | Serial pc(USBTX, USBRX); |
FrederickLemuel | 1:60606d35ed62 | 7 | Serial dev(p9,p10); |
FrederickLemuel | 1:60606d35ed62 | 8 | Timer t1,t2; |
4180_1 | 0:e693d5bf0a25 | 9 | |
FrederickLemuel | 1:60606d35ed62 | 10 | using namespace std; |
4180_1 | 0:e693d5bf0a25 | 11 | |
FrederickLemuel | 1:60606d35ed62 | 12 | char data; |
FrederickLemuel | 1:60606d35ed62 | 13 | char goal_val; |
FrederickLemuel | 1:60606d35ed62 | 14 | char h[10],g[10],w[10]; |
FrederickLemuel | 1:60606d35ed62 | 15 | int total_walktime=0; |
FrederickLemuel | 1:60606d35ed62 | 16 | float height,weight,goal,goal_f,stride_len,distance_covered,distance_left,calories; |
4180_1 | 0:e693d5bf0a25 | 17 | |
4180_1 | 0:e693d5bf0a25 | 18 | int main() |
4180_1 | 0:e693d5bf0a25 | 19 | { |
FrederickLemuel | 1:60606d35ed62 | 20 | |
4180_1 | 0:e693d5bf0a25 | 21 | LSM9DS1 IMU(p28, p27, 0xD6, 0x3C); |
FrederickLemuel | 1:60606d35ed62 | 22 | |
FrederickLemuel | 1:60606d35ed62 | 23 | float curr_value=0.0,last_value=0.0; |
FrederickLemuel | 1:60606d35ed62 | 24 | int step=0; |
FrederickLemuel | 1:60606d35ed62 | 25 | char data; |
FrederickLemuel | 1:60606d35ed62 | 26 | char goal_val; |
FrederickLemuel | 1:60606d35ed62 | 27 | char h[10],g[10],w[10]; |
FrederickLemuel | 1:60606d35ed62 | 28 | int total_walktime=0; |
FrederickLemuel | 1:60606d35ed62 | 29 | float height,weight,goal,goal_f,stride_len,distance_covered,distance_left,calories; |
FrederickLemuel | 1:60606d35ed62 | 30 | bool flag=0,flag2=0; |
FrederickLemuel | 1:60606d35ed62 | 31 | |
FrederickLemuel | 1:60606d35ed62 | 32 | //Initialize and Calibrate IMU |
FrederickLemuel | 1:60606d35ed62 | 33 | IMU.begin(); |
4180_1 | 0:e693d5bf0a25 | 34 | if (!IMU.begin()) { |
4180_1 | 0:e693d5bf0a25 | 35 | pc.printf("Failed to communicate with LSM9DS1.\n"); |
4180_1 | 0:e693d5bf0a25 | 36 | } |
4180_1 | 0:e693d5bf0a25 | 37 | IMU.calibrate(1); |
FrederickLemuel | 1:60606d35ed62 | 38 | |
FrederickLemuel | 1:60606d35ed62 | 39 | //Set baud rate for serial communication to 9600 |
FrederickLemuel | 1:60606d35ed62 | 40 | pc.baud(9600); |
FrederickLemuel | 1:60606d35ed62 | 41 | dev.baud(9600); |
FrederickLemuel | 1:60606d35ed62 | 42 | |
FrederickLemuel | 1:60606d35ed62 | 43 | //Get user input data over bluetooth |
FrederickLemuel | 1:60606d35ed62 | 44 | dev.printf("Enter weight in pounds: "); |
FrederickLemuel | 1:60606d35ed62 | 45 | dev.gets(w,5); |
FrederickLemuel | 1:60606d35ed62 | 46 | stringstream str(w); |
FrederickLemuel | 1:60606d35ed62 | 47 | str>>weight; |
FrederickLemuel | 1:60606d35ed62 | 48 | pc.printf("\nWeight = %.3f lbs",weight); |
FrederickLemuel | 1:60606d35ed62 | 49 | |
FrederickLemuel | 1:60606d35ed62 | 50 | dev.printf("Enter Height in Inches: "); |
FrederickLemuel | 1:60606d35ed62 | 51 | dev.gets(h,5); |
FrederickLemuel | 1:60606d35ed62 | 52 | stringstream str1(h); |
FrederickLemuel | 1:60606d35ed62 | 53 | str1>>height; |
FrederickLemuel | 1:60606d35ed62 | 54 | pc.printf("\nHeight = %.3f in",height); |
FrederickLemuel | 1:60606d35ed62 | 55 | stride_len=height*0.413; |
FrederickLemuel | 1:60606d35ed62 | 56 | pc.printf("\nStride_length = %f in", stride_len); |
FrederickLemuel | 1:60606d35ed62 | 57 | |
FrederickLemuel | 1:60606d35ed62 | 58 | dev.printf("\nEnter Daily Goal in Miles: "); |
FrederickLemuel | 1:60606d35ed62 | 59 | dev.gets(g,5); |
FrederickLemuel | 1:60606d35ed62 | 60 | stringstream str2(g); |
FrederickLemuel | 1:60606d35ed62 | 61 | str2>>goal; |
FrederickLemuel | 1:60606d35ed62 | 62 | pc.printf("\nGoal = %f mi",goal); |
FrederickLemuel | 1:60606d35ed62 | 63 | |
FrederickLemuel | 1:60606d35ed62 | 64 | while(1) |
FrederickLemuel | 1:60606d35ed62 | 65 | { |
FrederickLemuel | 1:60606d35ed62 | 66 | //Read accelerometer values from IMU |
4180_1 | 0:e693d5bf0a25 | 67 | while(!IMU.accelAvailable()); |
4180_1 | 0:e693d5bf0a25 | 68 | IMU.readAccel(); |
FrederickLemuel | 1:60606d35ed62 | 69 | wait(.25); |
FrederickLemuel | 1:60606d35ed62 | 70 | |
FrederickLemuel | 1:60606d35ed62 | 71 | curr_value=IMU.calcAccel(IMU.ax); |
FrederickLemuel | 1:60606d35ed62 | 72 | |
FrederickLemuel | 1:60606d35ed62 | 73 | //Look for a sharp change in accelerometer output to detect a step |
FrederickLemuel | 1:60606d35ed62 | 74 | if(abs(curr_value-last_value)>0.1) |
FrederickLemuel | 1:60606d35ed62 | 75 | { |
FrederickLemuel | 1:60606d35ed62 | 76 | step++; |
FrederickLemuel | 1:60606d35ed62 | 77 | //Timer t1 keeps track of the total time of movement |
FrederickLemuel | 1:60606d35ed62 | 78 | //Timer t2 keeps track of the duration for which the user is stationary |
FrederickLemuel | 1:60606d35ed62 | 79 | if(flag==0) |
FrederickLemuel | 1:60606d35ed62 | 80 | { |
FrederickLemuel | 1:60606d35ed62 | 81 | t1.start(); |
FrederickLemuel | 1:60606d35ed62 | 82 | flag=1; |
FrederickLemuel | 1:60606d35ed62 | 83 | if(flag2==1) |
FrederickLemuel | 1:60606d35ed62 | 84 | { |
FrederickLemuel | 1:60606d35ed62 | 85 | flag2=0; |
FrederickLemuel | 1:60606d35ed62 | 86 | t2.stop(); |
FrederickLemuel | 1:60606d35ed62 | 87 | t2.reset(); |
FrederickLemuel | 1:60606d35ed62 | 88 | } |
FrederickLemuel | 1:60606d35ed62 | 89 | } |
FrederickLemuel | 1:60606d35ed62 | 90 | total_walktime = t1.read(); |
FrederickLemuel | 1:60606d35ed62 | 91 | } |
FrederickLemuel | 1:60606d35ed62 | 92 | else |
FrederickLemuel | 1:60606d35ed62 | 93 | { |
FrederickLemuel | 1:60606d35ed62 | 94 | if(flag==1) |
FrederickLemuel | 1:60606d35ed62 | 95 | { |
FrederickLemuel | 1:60606d35ed62 | 96 | if(flag2==0) |
FrederickLemuel | 1:60606d35ed62 | 97 | { |
FrederickLemuel | 1:60606d35ed62 | 98 | t2.start(); |
FrederickLemuel | 1:60606d35ed62 | 99 | flag2=1; |
FrederickLemuel | 1:60606d35ed62 | 100 | } |
FrederickLemuel | 1:60606d35ed62 | 101 | if(t2.read()>=3) |
FrederickLemuel | 1:60606d35ed62 | 102 | { |
FrederickLemuel | 1:60606d35ed62 | 103 | flag=0; |
FrederickLemuel | 1:60606d35ed62 | 104 | flag2=0; |
FrederickLemuel | 1:60606d35ed62 | 105 | t2.stop(); |
FrederickLemuel | 1:60606d35ed62 | 106 | t2.reset(); |
FrederickLemuel | 1:60606d35ed62 | 107 | t1.stop(); |
FrederickLemuel | 1:60606d35ed62 | 108 | } |
FrederickLemuel | 1:60606d35ed62 | 109 | } |
FrederickLemuel | 1:60606d35ed62 | 110 | } |
FrederickLemuel | 1:60606d35ed62 | 111 | |
FrederickLemuel | 1:60606d35ed62 | 112 | last_value = curr_value; |
FrederickLemuel | 1:60606d35ed62 | 113 | |
FrederickLemuel | 1:60606d35ed62 | 114 | distance_covered = step*stride_len/63360; |
FrederickLemuel | 1:60606d35ed62 | 115 | distance_left = goal-distance_covered; |
FrederickLemuel | 1:60606d35ed62 | 116 | calories = 0.63*distance_covered*weight; |
FrederickLemuel | 1:60606d35ed62 | 117 | |
FrederickLemuel | 1:60606d35ed62 | 118 | pc.printf("\nSteps = %d",step); |
FrederickLemuel | 1:60606d35ed62 | 119 | pc.printf("\nDistance Covered = %.3f miles",distance_covered); |
FrederickLemuel | 1:60606d35ed62 | 120 | pc.printf("\nDistance left to reach your goal = %.3f miles", distance_left); |
FrederickLemuel | 1:60606d35ed62 | 121 | pc.printf("\nCalories burnt = %.3f cal",calories); |
FrederickLemuel | 1:60606d35ed62 | 122 | pc.printf("\nTotal Walk Time = %d s\n",total_walktime); |
4180_1 | 0:e693d5bf0a25 | 123 | } |
4180_1 | 0:e693d5bf0a25 | 124 | } |
4180_1 | 0:e693d5bf0a25 | 125 |