General IMU Library

Dependencies:   mbed LSM9DS1_Library

IMU.cpp

Committer:
simplyellow
Date:
2017-02-16
Revision:
4:ab08a70e0d7d
Parent:
2:ae1bfb236387

File content as of revision 4:ab08a70e0d7d:

#include "IMU.h"

#define PI 3.14159

IMU::IMU() {
    I = new LSM9DS1(p9, p10, 0xD6, 0x3C);
    I->begin();
    if (!I->begin()) {
        printf("Failed to communicate with LSM9DS1.\n");
    }
    I->calibrate(1);
    //bool state;
    //Do we want to give state a starting value?
    ax01 = I->calcAccel(I->ax);
    ay01 = I->calcAccel(I->ay);
    az01 = I->calcAccel(I->az);
    ax0 = ax01;
    ay0 = ay01;
    az0 = az01;
}

void IMU::trackBed()
{
    if (state != 0) {
        return;
    }
    else {
        while(state == 0) {
            while(!I->accelAvailable());
            I->readAccel();

             // current a = <ax,ay,az>
            ax = I->calcAccel(I->ax);
            ay = I->calcAccel(I->ay);
            az = I->calcAccel(I->az);
            // theta in degrees between a0 and a
            theta = acos((ax0*ax + ay0*ay + az0*az)/(sqrt(ax0*ax0+ay0*ay0+az0*az0)*sqrt(ax*ax+ay*ay+az*az)))*180/PI;
        }
    }
}

void IMU::trackHeading()
{
    if (state != 1) {
        return;
    }
    else {
        while (state == 1) {

            while(!I->accelAvailable());

            I->readAccel();
            ax0 = I->calcAccel(I->ax);
            ay0 = I->calcAccel(I->ay);
            az0 = I->calcAccel(I->az);
        }
    }
}