v1
Dependencies: LSM9DS1_Library_cal mbed
Fork of LSM9DS1_Demo_wCal by
main.cpp
- Committer:
- FrederickLemuel
- Date:
- 2017-03-14
- Revision:
- 2:b21d96b985ab
- Parent:
- 1:60606d35ed62
File content as of revision 2:b21d96b985ab:
#include "mbed.h"
#include "LSM9DS1.h"
#include <string>
#include <sstream>
Serial pc(USBTX, USBRX);
Serial dev(p9,p10);
Timer t1,t2;
using namespace std;
char data;
char goal_val;
char h[10],g[10],w[10];
int total_walktime=0;
float height,weight,goal,goal_f,stride_len,distance_covered,distance_left,calories;
int main()
{
LSM9DS1 IMU(p28, p27, 0xD6, 0x3C);
float curr_value=0.0,last_value=0.0;
int step=0;
char data;
char goal_val;
char h[10],g[10],w[10];
int total_walktime=0;
float height,weight,goal,goal_f,stride_len,distance_covered,distance_left,calories;
bool flag=0,flag2=0;
//Initialize and Calibrate IMU
IMU.begin();
if (!IMU.begin()) {
pc.printf("Failed to communicate with LSM9DS1.\n");
}
IMU.calibrate(1);
//Set baud rate for serial communication to 9600
pc.baud(9600);
dev.baud(9600);
//Get user input data over bluetooth
dev.printf("Enter weight in pounds: ");
dev.gets(w,5);
stringstream str(w);
str>>weight;
pc.printf("\nWeight = %.3f lbs",weight);
dev.printf("Enter Height in Inches: ");
dev.gets(h,5);
stringstream str1(h);
str1>>height;
pc.printf("\nHeight = %.3f in",height);
stride_len=height*0.413;
pc.printf("\nStride_length = %f in", stride_len);
dev.printf("\nEnter Daily Goal in Miles: ");
dev.gets(g,5);
stringstream str2(g);
str2>>goal;
pc.printf("\nGoal = %f mi",goal);
while(1)
{
//Read accelerometer values from IMU
while(!IMU.accelAvailable());
IMU.readAccel();
wait(.25);
curr_value=IMU.calcAccel(IMU.ax);
//Look for a sharp change in accelerometer output to detect a step
if(abs(curr_value-last_value)>0.1)
{
step++;
//Timer t1 keeps track of the total time of movement
//Timer t2 keeps track of the duration for which the user is stationary
if(flag==0)
{
t1.start();
flag=1;
if(flag2==1)
{
flag2=0;
t2.stop();
t2.reset();
}
}
total_walktime = t1.read();
}
else
{
if(flag==1)
{
if(flag2==0)
{
t2.start();
flag2=1;
}
if(t2.read()>=3)
{
flag=0;
flag2=0;
t2.stop();
t2.reset();
t1.stop();
}
}
}
last_value = curr_value;
distance_covered = step*stride_len/63360;
distance_left = goal-distance_covered;
calories = 0.63*distance_covered*weight;
pc.printf("\nSteps = %d",step);
pc.printf("\nDistance Covered = %.3f miles",distance_covered);
pc.printf("\nDistance left to reach your goal = %.3f miles", distance_left);
pc.printf("\nCalories burnt = %.3f cal",calories);
pc.printf("\nTotal Walk Time = %d s\n",total_walktime);
}
}
