.

Dependencies:   BNO055 SDFileSystem mbed

Committer:
alejo5214416
Date:
Thu Sep 06 06:17:15 2018 +0000
Revision:
3:a4a031655cda
Parent:
2:54bb4cee7885
Child:
6:122749ed4e2e
CALIBRACION PERFECTA, antes de cambios en interrupcion por aceler?metro

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alejo5214416 0:b91b6f47eb98 1 #include "mbed.h"
alejo5214416 0:b91b6f47eb98 2 #include "BNO055.h"
alejo5214416 2:54bb4cee7885 3 #define TS 0.1
alejo5214416 0:b91b6f47eb98 4 using namespace std;
alejo5214416 3:a4a031655cda 5
alejo5214416 0:b91b6f47eb98 6 DigitalOut led1(LED1);
alejo5214416 2:54bb4cee7885 7 DigitalOut green(p21);
alejo5214416 2:54bb4cee7885 8 DigitalOut blue(p22);
alejo5214416 2:54bb4cee7885 9 DigitalOut red(p23);
alejo5214416 2:54bb4cee7885 10
alejo5214416 3:a4a031655cda 11 Serial pc(USBTX, USBRX);
alejo5214416 0:b91b6f47eb98 12 // BNO055
alejo5214416 0:b91b6f47eb98 13 BNO055 bno055(p9, p10);
alejo5214416 3:a4a031655cda 14 InterruptIn interrupt(p15, PullUp);
alejo5214416 3:a4a031655cda 15
alejo5214416 3:a4a031655cda 16 void event();
alejo5214416 0:b91b6f47eb98 17
alejo5214416 3:a4a031655cda 18 int main()
alejo5214416 3:a4a031655cda 19 {
alejo5214416 3:a4a031655cda 20 green=0;
alejo5214416 3:a4a031655cda 21 blue=0;
alejo5214416 3:a4a031655cda 22 red=1;
alejo5214416 0:b91b6f47eb98 23 bno055.reset();
alejo5214416 3:a4a031655cda 24 interrupt.rise(&event);
alejo5214416 0:b91b6f47eb98 25 bno055.setmode(OPERATION_MODE_NDOF);
alejo5214416 0:b91b6f47eb98 26 bno055.write_calibration_data();
alejo5214416 0:b91b6f47eb98 27 bno055.get_calib();
alejo5214416 3:a4a031655cda 28 wait(2);
alejo5214416 3:a4a031655cda 29
alejo5214416 3:a4a031655cda 30 while(((bno055.calib>>4)&3)!=3) {
alejo5214416 3:a4a031655cda 31 red=1;
alejo5214416 3:a4a031655cda 32 blue=0;
alejo5214416 3:a4a031655cda 33 green=0;
alejo5214416 3:a4a031655cda 34 bno055.write_calibration_data();
alejo5214416 0:b91b6f47eb98 35 bno055.get_calib();
alejo5214416 3:a4a031655cda 36 wait_ms(200);
alejo5214416 3:a4a031655cda 37 red = 0;
alejo5214416 3:a4a031655cda 38 wait_ms(200);
alejo5214416 3:a4a031655cda 39 pc.printf("Calibrando giroscopio= %d\n",(bno055.calib>>4)&(3));
alejo5214416 0:b91b6f47eb98 40 }
alejo5214416 3:a4a031655cda 41 pc.printf("GIROSCOPIO CALIBRADO= %d\n",(bno055.calib>>4)&(3));
alejo5214416 3:a4a031655cda 42 wait(2);
alejo5214416 3:a4a031655cda 43
alejo5214416 3:a4a031655cda 44
alejo5214416 3:a4a031655cda 45 red=0;
alejo5214416 3:a4a031655cda 46 bno055.write_calibration_data();
alejo5214416 3:a4a031655cda 47 bno055.get_calib();
alejo5214416 3:a4a031655cda 48 while((bno055.calib & 3) != 3) {
alejo5214416 3:a4a031655cda 49 red=0;
alejo5214416 3:a4a031655cda 50 blue=1;
alejo5214416 3:a4a031655cda 51 green=0;
alejo5214416 3:a4a031655cda 52 bno055.write_calibration_data();
alejo5214416 3:a4a031655cda 53 bno055.get_calib();
alejo5214416 3:a4a031655cda 54 wait_ms(200);
alejo5214416 3:a4a031655cda 55 blue = 0;
alejo5214416 3:a4a031655cda 56 wait_ms(200);
alejo5214416 3:a4a031655cda 57 pc.printf("Calibrando Magnetometro= %d\n",bno055.calib & (3));
alejo5214416 3:a4a031655cda 58 }
alejo5214416 3:a4a031655cda 59 pc.printf("MAGNETOMETRO CALIBRADO= %d\n",bno055.calib & (3));
alejo5214416 3:a4a031655cda 60 wait(2);
alejo5214416 3:a4a031655cda 61
alejo5214416 3:a4a031655cda 62 blue=0;
alejo5214416 3:a4a031655cda 63 bno055.write_calibration_data();
alejo5214416 3:a4a031655cda 64 bno055.get_calib();
alejo5214416 3:a4a031655cda 65 while(((bno055.calib>>2)& 3 )!= 3) {
alejo5214416 3:a4a031655cda 66 red=0;
alejo5214416 3:a4a031655cda 67 blue=0;
alejo5214416 3:a4a031655cda 68 green=1;
alejo5214416 3:a4a031655cda 69 bno055.write_calibration_data();
alejo5214416 3:a4a031655cda 70 bno055.get_calib();
alejo5214416 3:a4a031655cda 71 wait_ms(200);
alejo5214416 3:a4a031655cda 72 green = 0;
alejo5214416 3:a4a031655cda 73 wait_ms(200);
alejo5214416 3:a4a031655cda 74 pc.printf("Calibrando acelerometro= %d\n",(bno055.calib>>2)&(3));
alejo5214416 3:a4a031655cda 75 }
alejo5214416 3:a4a031655cda 76 pc.printf("ACELEROMETRO CALIBRADO= %d\n",(bno055.calib>>2)&(3));
alejo5214416 3:a4a031655cda 77 pc.printf("IMU CORRECTAMENTE CALIBRADA= %d\n",(bno055.calib>>2)&(3));
alejo5214416 3:a4a031655cda 78 wait(2);
alejo5214416 3:a4a031655cda 79 green=1;
alejo5214416 3:a4a031655cda 80
alejo5214416 3:a4a031655cda 81 if (bno055.check()) {
alejo5214416 1:74fb432755d0 82 bno055.initIntr();
alejo5214416 3:a4a031655cda 83 }
alejo5214416 3:a4a031655cda 84
alejo5214416 0:b91b6f47eb98 85 while(1) {
alejo5214416 3:a4a031655cda 86
alejo5214416 0:b91b6f47eb98 87 bno055.get_angles(); //query the i2c device
alejo5214416 1:74fb432755d0 88 pc.printf("yaw:%6.2f pitch:%6.2f roll:%6.2f\r\n",bno055.euler.yaw, bno055.euler.pitch, bno055.euler.roll);
alejo5214416 0:b91b6f47eb98 89 bno055.get_lia(); //query the i2c device
alejo5214416 0:b91b6f47eb98 90 pc.printf("X: %3.2f, Y: %3.2f, Z: %3.2f\r\n",bno055.lia.x,bno055.lia.y,bno055.lia.z);
alejo5214416 2:54bb4cee7885 91 wait_ms(TS);
alejo5214416 3:a4a031655cda 92
alejo5214416 0:b91b6f47eb98 93 }
alejo5214416 0:b91b6f47eb98 94 }
alejo5214416 0:b91b6f47eb98 95
alejo5214416 0:b91b6f47eb98 96
alejo5214416 3:a4a031655cda 97 void event()
alejo5214416 3:a4a031655cda 98 {
alejo5214416 1:74fb432755d0 99 led1 = !led1;
alejo5214416 2:54bb4cee7885 100 //wait(10);
alejo5214416 2:54bb4cee7885 101 /*
alejo5214416 2:54bb4cee7885 102 float v_act=0;
alejo5214416 2:54bb4cee7885 103 float x_act=0;
alejo5214416 2:54bb4cee7885 104 float v_ant=0;
alejo5214416 2:54bb4cee7885 105 float x_ant=0;
alejo5214416 2:54bb4cee7885 106 bno055.get_angles(); //query the i2c device
alejo5214416 2:54bb4cee7885 107 bno055.get_lia(); //query the i2c device
alejo5214416 2:54bb4cee7885 108 v_act = v_ant + TS*float(bno055.lia.x);
alejo5214416 2:54bb4cee7885 109 wait(TS);
alejo5214416 2:54bb4cee7885 110 pc.printf("V_act = %f",v_act);
alejo5214416 2:54bb4cee7885 111 */
alejo5214416 0:b91b6f47eb98 112 bno055.resetIntr();
alejo5214416 3:a4a031655cda 113 }