Dependencies:   BNO055 SDFileSystem mbed

main.cpp

Committer:
alejo5214416
Date:
2018-09-06
Revision:
3:a4a031655cda
Parent:
2:54bb4cee7885
Child:
6:122749ed4e2e

File content as of revision 3:a4a031655cda:

#include "mbed.h"
#include "BNO055.h"
#define TS 0.1
using namespace std;

DigitalOut led1(LED1);
DigitalOut green(p21);
DigitalOut blue(p22);
DigitalOut red(p23);

Serial pc(USBTX, USBRX);
// BNO055
BNO055 bno055(p9, p10);
InterruptIn interrupt(p15, PullUp);

void event();

int main()
{
    green=0;
    blue=0;
    red=1;
    bno055.reset();
    interrupt.rise(&event);
    bno055.setmode(OPERATION_MODE_NDOF);
    bno055.write_calibration_data();
    bno055.get_calib();
    wait(2);

    while(((bno055.calib>>4)&3)!=3) {
        red=1;
        blue=0;
        green=0;
        bno055.write_calibration_data();
        bno055.get_calib();
        wait_ms(200);
        red = 0;
        wait_ms(200);
        pc.printf("Calibrando giroscopio= %d\n",(bno055.calib>>4)&(3));
    }
    pc.printf("GIROSCOPIO CALIBRADO= %d\n",(bno055.calib>>4)&(3));
    wait(2);


    red=0;
    bno055.write_calibration_data();
    bno055.get_calib();
    while((bno055.calib & 3) != 3) {
        red=0;
        blue=1;
        green=0;
        bno055.write_calibration_data();
        bno055.get_calib();
        wait_ms(200);
        blue = 0;
        wait_ms(200);
        pc.printf("Calibrando Magnetometro= %d\n",bno055.calib & (3));
    }
    pc.printf("MAGNETOMETRO CALIBRADO= %d\n",bno055.calib & (3));
    wait(2);

    blue=0;
    bno055.write_calibration_data();
    bno055.get_calib();
    while(((bno055.calib>>2)& 3 )!= 3) {
        red=0;
        blue=0;
        green=1;
        bno055.write_calibration_data();
        bno055.get_calib();
        wait_ms(200);
        green = 0;
        wait_ms(200);
        pc.printf("Calibrando acelerometro= %d\n",(bno055.calib>>2)&(3));
    }
    pc.printf("ACELEROMETRO CALIBRADO= %d\n",(bno055.calib>>2)&(3));
    pc.printf("IMU CORRECTAMENTE CALIBRADA= %d\n",(bno055.calib>>2)&(3));
    wait(2);
    green=1;

    if (bno055.check()) {
        bno055.initIntr();
    }

    while(1) {

        bno055.get_angles(); //query the i2c device
        pc.printf("yaw:%6.2f pitch:%6.2f roll:%6.2f\r\n",bno055.euler.yaw, bno055.euler.pitch, bno055.euler.roll);
        bno055.get_lia(); //query the i2c device
        pc.printf("X: %3.2f, Y: %3.2f, Z: %3.2f\r\n",bno055.lia.x,bno055.lia.y,bno055.lia.z);
        wait_ms(TS);

    }
}


void event()
{
    led1 = !led1;
    //wait(10);
    /*
    float v_act=0;
    float x_act=0;
    float v_ant=0;
    float x_ant=0;
        bno055.get_angles(); //query the i2c device
        bno055.get_lia(); //query the i2c device
        v_act = v_ant + TS*float(bno055.lia.x);
        wait(TS);
        pc.printf("V_act = %f",v_act);
        */
    bno055.resetIntr();
}