Laura Lamprea
/
2_calibration
calibracion
main.cpp
- Committer:
- lauralamprea
- Date:
- 2021-04-11
- Revision:
- 1:ecce7ee00ac2
- Parent:
- 0:2104545a6597
File content as of revision 1:ecce7ee00ac2:
#include "mbed.h" #include "platform/mbed_thread.h" // Blinking rate in milliseconds #define BLINKING_RATE1_MS 500 // Blinking rate in milliseconds #define ADDRESS_MPU 0XD0 #define CONS_AC 2.0/32768.0 #define CONS_GY 250.0/32768.0 #define CONS_T 333.87 //estados iniciales en Hexadecimal int16_t ini_ac_x, ini_ac_y, ini_ac_z; int16_t ini_gy_x, ini_gy_y, ini_gy_z; int16_t ini_tem; //varibles para el offset float of_ac_x, of_ac_y, of_ac_z; float of_gy_x ,of_gy_y ,of_gy_z; float of_tem; // variable de max y min para offset float max_off_ac_x=-32768.0, min_off_ac_x=32768.0,max_off_ac_y=-32768.0, min_off_ac_y=32768.0,max_off_ac_z=-32768.0, min_off_ac_z=32768.0; float max_off_gy_x=-32768.0, min_off_gy_x=32768.0, max_off_gy_y=-32768.0, min_off_gy_y=32768.0, max_off_gy_z=-32768.0, min_off_gy_z=32768.0; //variable finales float ac_x, ac_y, ac_z; float gy_x, gy_y, gy_z; float tem; //data char cmda1[2]; char data[1]; char datos_ac_gy[14]; float buffer[500][8]; int j; Timer ts;//objeto tiempo float timer=0.0 , cont_timer=0.0, t_fin=10.0; bool calibracion= true; //inicializar conexiones Serial com_pc(SERIAL_TX, SERIAL_RX); I2C i2c(PB_9,PB_8);//sda,scl DigitalIn eneable (PA_0); int main() { // Initialise the digital pin LED1 as an output DigitalOut led(LED2); cmda1[0]=0x6B; cmda1[1]=0x00; i2c.write(ADDRESS_MPU,cmda1,2); //// com_pc.printf("hizo la prueba de teset"); cmda1[0]=0x75; i2c.write(ADDRESS_MPU,cmda1,1); i2c.read(ADDRESS_MPU,data,1); if (data[0]!=0x68){ com_pc.printf("conexion fallida- \n"); com_pc.printf("%#X",data[0]); } else{ com_pc.printf("conexion exitosa- \n"); com_pc.printf("%#X",data[0]); } wait(0.1); //configurar resolucion cmda1[0]=0x1B;//giroscopio cmda1[1]=0x00; i2c.write(ADDRESS_MPU,cmda1,2); cmda1[0]=0x1C;//acelerometro cmda1[1]=0x00; i2c.write(ADDRESS_MPU,cmda1,2); wait(0.1); while (calibracion){ led = 1; if(com_pc.getc() == 'c'){ for (j=0; j<=100; j++){ cmda1[0]=0x3B; i2c.write(ADDRESS_MPU,cmda1,1); i2c.read(ADDRESS_MPU,datos_ac_gy,14); ini_ac_x= datos_ac_gy[0]<<8 | datos_ac_gy[1]; ini_ac_y= datos_ac_gy[2]<<8 | datos_ac_gy[3]; ini_ac_z= datos_ac_gy[4]<<8 | datos_ac_gy[5]; ini_tem = datos_ac_gy[6]<<8 | datos_ac_gy[7]; ini_gy_x= datos_ac_gy[8]<<8 | datos_ac_gy[9]; ini_gy_y= datos_ac_gy[10]<<8 | datos_ac_gy[11]; ini_gy_z= datos_ac_gy[12]<<8 | datos_ac_gy[13]; } wait(0.1); for (j=0; j<=100; j++){ cmda1[0]=0x3B; i2c.write(ADDRESS_MPU,cmda1,1); i2c.read(ADDRESS_MPU,datos_ac_gy,14); ini_ac_x= datos_ac_gy[0]<<8 | datos_ac_gy[1]; ini_ac_y= datos_ac_gy[2]<<8 | datos_ac_gy[3]; ini_ac_z= datos_ac_gy[4]<<8 | datos_ac_gy[5]; ini_tem = datos_ac_gy[6]<<8 | datos_ac_gy[7]; ini_gy_x= datos_ac_gy[8]<<8 | datos_ac_gy[9]; ini_gy_y= datos_ac_gy[10]<<8 | datos_ac_gy[11]; ini_gy_z= datos_ac_gy[12]<<8 | datos_ac_gy[13]; //calcular maximos y minimos if (ini_ac_x >= max_off_ac_x){ max_off_ac_x=ini_ac_x; } if (ini_ac_x <= min_off_ac_x){ min_off_ac_x=ini_ac_x; } if (ini_ac_y >= max_off_ac_y){ max_off_ac_y=ini_ac_y; } if (ini_ac_y <= min_off_ac_y){ min_off_ac_z = ini_ac_z; } if (ini_ac_z >= max_off_ac_z){ max_off_ac_y=ini_ac_y; } if (ini_ac_z <= min_off_ac_z){ min_off_ac_z = ini_ac_z; } if (ini_gy_x >= max_off_gy_x){ max_off_gy_x=ini_gy_x; } if (ini_gy_x <= max_off_gy_x){ max_off_gy_x=ini_gy_x; } if (ini_gy_y >= max_off_gy_y){ max_off_gy_y=ini_gy_y; } if (ini_gy_y <= max_off_gy_y){ max_off_gy_y=ini_gy_y; } if (ini_gy_z >= max_off_gy_z){ max_off_gy_z=ini_gy_z; } if (ini_gy_z <= max_off_gy_z){ max_off_gy_z=ini_gy_z; } } wait(0.01); of_ac_x=(max_off_ac_x + min_off_ac_x ) /2; of_ac_y=(max_off_ac_y + min_off_ac_y ) /2; of_ac_z=(max_off_ac_z + min_off_ac_z ) /2; of_gy_x=(max_off_gy_x + min_off_gy_x ) /2; of_gy_y=(max_off_gy_y + min_off_gy_y ) /2; of_gy_z=(max_off_gy_z + min_off_gy_z ) /2; com_pc.printf("%.2f, %.2f, %.2f, %.2f, %.2f, %.2f\n",of_ac_x,of_ac_y,of_ac_z, of_gy_x,of_gy_y,of_gy_z); com_pc.printf("a\n"); } if(com_pc.getc() == 'H'){ j=1; led = 0; while (1){ cmda1[0]=0x3B; ts.reset(); ts.start(); i2c.write(ADDRESS_MPU,cmda1,1); i2c.read(ADDRESS_MPU,datos_ac_gy,14); ini_ac_x= datos_ac_gy[0]<<8 | datos_ac_gy[1]; ini_ac_y= datos_ac_gy[2]<<8 | datos_ac_gy[3]; ini_ac_z= datos_ac_gy[4]<<8 | datos_ac_gy[5]; ini_tem = datos_ac_gy[6]<<8 | datos_ac_gy[7]; ini_gy_x= datos_ac_gy[8]<<8 | datos_ac_gy[9]; ini_gy_y= datos_ac_gy[10]<<8 | datos_ac_gy[11]; ini_gy_z= datos_ac_gy[12]<<8 | datos_ac_gy[13]; wait_us(8425); ts.stop(); timer=ts.read(); cont_timer += timer; com_pc.printf("%d,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%2f\n",j++,cont_timer,(float)ini_ac_x,(float)ini_ac_y,(float)ini_ac_z,(float)ini_gy_x,(float)ini_gy_y,(float)ini_gy_z); if(cont_timer >= t_fin){ cont_timer=0.0; com_pc.printf("A\n"); break; } } } } }