PRIMER MUESTREO DE LA IMU

Dependencies:   mbed

Committer:
acastiblancoc
Date:
Sat Aug 24 20:27:34 2019 +0000
Revision:
0:0b4ace0e76db
PRIMERA PRUEBA DE MUESTREO

Who changed what in which revision?

UserRevisionLine numberNew contents of line
acastiblancoc 0:0b4ace0e76db 1 #include "mbed.h"
acastiblancoc 0:0b4ace0e76db 2
acastiblancoc 0:0b4ace0e76db 3 Serial pc(SERIAL_TX, SERIAL_RX); // (TX, RX)
acastiblancoc 0:0b4ace0e76db 4 I2C i2c(PB_9, PB_8 ); // (SDA, SCL)
acastiblancoc 0:0b4ace0e76db 5 DigitalIn boton (USER_BUTTON);
acastiblancoc 0:0b4ace0e76db 6 const int addr = 0xD0; // 7 bit I2C address. Accede a la comunicacion I2C
acastiblancoc 0:0b4ace0e76db 7 char cmd[2];
acastiblancoc 0:0b4ace0e76db 8 char read_buffer[14];
acastiblancoc 0:0b4ace0e76db 9 int16_t acc_x = 0, acc_y = 0, acc_z = 0;
acastiblancoc 0:0b4ace0e76db 10 int16_t gyr_x = 0, gyr_y = 0, gyr_z = 0;
acastiblancoc 0:0b4ace0e76db 11 int16_t temp = 0;
acastiblancoc 0:0b4ace0e76db 12 int flag=0;
acastiblancoc 0:0b4ace0e76db 13 float ACC_SEN = 16384.0; //Resolución ACC
acastiblancoc 0:0b4ace0e76db 14 float GYR_SEN = 131.0; //Resolución GYR
acastiblancoc 0:0b4ace0e76db 15 float TEM_SEN = 340.0; //Resolución temp
acastiblancoc 0:0b4ace0e76db 16
acastiblancoc 0:0b4ace0e76db 17 float facc_x = 0, facc_y = 0, facc_z = 0;
acastiblancoc 0:0b4ace0e76db 18 float fgyr_x = 0, fgyr_y = 0, fgyr_z = 0;
acastiblancoc 0:0b4ace0e76db 19 float ftemp = 0;
acastiblancoc 0:0b4ace0e76db 20
acastiblancoc 0:0b4ace0e76db 21 DigitalOut myled(LED1);
acastiblancoc 0:0b4ace0e76db 22
acastiblancoc 0:0b4ace0e76db 23
acastiblancoc 0:0b4ace0e76db 24 void LECTURA_DATOS100 ()
acastiblancoc 0:0b4ace0e76db 25 {
acastiblancoc 0:0b4ace0e76db 26 for(int i=0; i<=100;i++)
acastiblancoc 0:0b4ace0e76db 27 {
acastiblancoc 0:0b4ace0e76db 28 wait_ms(10);
acastiblancoc 0:0b4ace0e76db 29 cmd[0]=0x3B;
acastiblancoc 0:0b4ace0e76db 30 i2c.write(addr, cmd, 1); //Escritura del registro de inicio, comienza a revisar los diferentes registros segun su orden.
acastiblancoc 0:0b4ace0e76db 31 //Por eso el orden de impresion y el tamaño del buffer (14)
acastiblancoc 0:0b4ace0e76db 32 i2c.read(addr, read_buffer, 14); //Lectura en rafaga de los valores de la MPU
acastiblancoc 0:0b4ace0e76db 33
acastiblancoc 0:0b4ace0e76db 34 //.................Construcción de la medición de los valores ..................
acastiblancoc 0:0b4ace0e76db 35 acc_x = read_buffer[0]<<8 | read_buffer[1];
acastiblancoc 0:0b4ace0e76db 36 acc_y = read_buffer[2]<<8 | read_buffer[3];
acastiblancoc 0:0b4ace0e76db 37 acc_z = read_buffer[4]<<8 | read_buffer[5];
acastiblancoc 0:0b4ace0e76db 38 temp = read_buffer[6]<<8 | read_buffer[7];
acastiblancoc 0:0b4ace0e76db 39 gyr_x = read_buffer[8]<<8 | read_buffer[9];
acastiblancoc 0:0b4ace0e76db 40 gyr_y = read_buffer[10]<<8 | read_buffer[11];
acastiblancoc 0:0b4ace0e76db 41 gyr_z = read_buffer[12]<<8 | read_buffer[13];
acastiblancoc 0:0b4ace0e76db 42
acastiblancoc 0:0b4ace0e76db 43 facc_x = acc_x/ACC_SEN;
acastiblancoc 0:0b4ace0e76db 44 facc_y = acc_y/ACC_SEN;
acastiblancoc 0:0b4ace0e76db 45 facc_z = acc_z/ACC_SEN;
acastiblancoc 0:0b4ace0e76db 46 fgyr_x = gyr_x/GYR_SEN;
acastiblancoc 0:0b4ace0e76db 47 fgyr_y = gyr_y/GYR_SEN;
acastiblancoc 0:0b4ace0e76db 48 fgyr_z = gyr_z/GYR_SEN;
acastiblancoc 0:0b4ace0e76db 49 ftemp= ((temp)/TEM_SEN)+36.53;
acastiblancoc 0:0b4ace0e76db 50 pc.printf("ACCx = %.2f ACCy = %.2f ACCz = %.2f GYRx = %.2f GYRy = %.2f GYRz = %.2f Temp = %.2f \r\n ", facc_x, facc_y, facc_z, fgyr_x, fgyr_y, fgyr_z, ftemp);
acastiblancoc 0:0b4ace0e76db 51 pc.printf("MUESTRA NO. %i\n", i);
acastiblancoc 0:0b4ace0e76db 52 pc.printf("MUESTRA NO. %i\n", i);
acastiblancoc 0:0b4ace0e76db 53
acastiblancoc 0:0b4ace0e76db 54 }
acastiblancoc 0:0b4ace0e76db 55 }
acastiblancoc 0:0b4ace0e76db 56
acastiblancoc 0:0b4ace0e76db 57
acastiblancoc 0:0b4ace0e76db 58
acastiblancoc 0:0b4ace0e76db 59 void LECTURA_DATOS500 ()
acastiblancoc 0:0b4ace0e76db 60 {
acastiblancoc 0:0b4ace0e76db 61 for(int i=0; i<=500;i++)
acastiblancoc 0:0b4ace0e76db 62 {
acastiblancoc 0:0b4ace0e76db 63 wait_ms(10);
acastiblancoc 0:0b4ace0e76db 64 cmd[0]=0x3B;
acastiblancoc 0:0b4ace0e76db 65 i2c.write(addr, cmd, 1); //Escritura del registro de inicio, comienza a revisar los diferentes registros segun su orden.
acastiblancoc 0:0b4ace0e76db 66 //Por eso el orden de impresion y el tamaño del buffer (14)
acastiblancoc 0:0b4ace0e76db 67 i2c.read(addr, read_buffer, 14); //Lectura en rafaga de los valores de la MPU
acastiblancoc 0:0b4ace0e76db 68
acastiblancoc 0:0b4ace0e76db 69 //.................Construcción de la medición de los valores ..................
acastiblancoc 0:0b4ace0e76db 70 acc_x = read_buffer[0]<<8 | read_buffer[1];
acastiblancoc 0:0b4ace0e76db 71 acc_y = read_buffer[2]<<8 | read_buffer[3];
acastiblancoc 0:0b4ace0e76db 72 acc_z = read_buffer[4]<<8 | read_buffer[5];
acastiblancoc 0:0b4ace0e76db 73 temp = read_buffer[6]<<8 | read_buffer[7];
acastiblancoc 0:0b4ace0e76db 74 gyr_x = read_buffer[8]<<8 | read_buffer[9];
acastiblancoc 0:0b4ace0e76db 75 gyr_y = read_buffer[10]<<8 | read_buffer[11];
acastiblancoc 0:0b4ace0e76db 76 gyr_z = read_buffer[12]<<8 | read_buffer[13];
acastiblancoc 0:0b4ace0e76db 77
acastiblancoc 0:0b4ace0e76db 78 facc_x = acc_x/ACC_SEN;
acastiblancoc 0:0b4ace0e76db 79 facc_y = acc_y/ACC_SEN;
acastiblancoc 0:0b4ace0e76db 80 facc_z = acc_z/ACC_SEN;
acastiblancoc 0:0b4ace0e76db 81 fgyr_x = gyr_x/GYR_SEN;
acastiblancoc 0:0b4ace0e76db 82 fgyr_y = gyr_y/GYR_SEN;
acastiblancoc 0:0b4ace0e76db 83 fgyr_z = gyr_z/GYR_SEN;
acastiblancoc 0:0b4ace0e76db 84 ftemp= ((temp)/TEM_SEN)+36.53;
acastiblancoc 0:0b4ace0e76db 85 pc.printf("ACCx = %.2f ACCy = %.2f ACCz = %.2f GYRx = %.2f GYRy = %.2f GYRz = %.2f Temp = %.2f \r\n ", facc_x, facc_y, facc_z, fgyr_x, fgyr_y, fgyr_z, ftemp);
acastiblancoc 0:0b4ace0e76db 86 pc.printf("MUESTRA NO. %i\n", i);
acastiblancoc 0:0b4ace0e76db 87
acastiblancoc 0:0b4ace0e76db 88 }
acastiblancoc 0:0b4ace0e76db 89 }
acastiblancoc 0:0b4ace0e76db 90
acastiblancoc 0:0b4ace0e76db 91 int main()
acastiblancoc 0:0b4ace0e76db 92 {
acastiblancoc 0:0b4ace0e76db 93 pc.printf("Prueba MPU6050 \n\r");
acastiblancoc 0:0b4ace0e76db 94
acastiblancoc 0:0b4ace0e76db 95 cmd[0] = 0x6B;
acastiblancoc 0:0b4ace0e76db 96 cmd[1] = 0x00;
acastiblancoc 0:0b4ace0e76db 97 i2c.write(addr, cmd, 2); //Desactivar modo hibernación
acastiblancoc 0:0b4ace0e76db 98
acastiblancoc 0:0b4ace0e76db 99 cmd[0] = 0x1B;
acastiblancoc 0:0b4ace0e76db 100 cmd[1] = 0x00;
acastiblancoc 0:0b4ace0e76db 101 i2c.write(addr, cmd, 2); //gyro full scale 250 DPS
acastiblancoc 0:0b4ace0e76db 102
acastiblancoc 0:0b4ace0e76db 103 cmd[0] = 0x1C;
acastiblancoc 0:0b4ace0e76db 104 cmd[1] = 0x00;
acastiblancoc 0:0b4ace0e76db 105 i2c.write(addr, cmd, 2); //ACC fullsclae 2G
acastiblancoc 0:0b4ace0e76db 106
acastiblancoc 0:0b4ace0e76db 107 while(1) {
acastiblancoc 0:0b4ace0e76db 108
acastiblancoc 0:0b4ace0e76db 109 if(boton==0)
acastiblancoc 0:0b4ace0e76db 110 {
acastiblancoc 0:0b4ace0e76db 111 if (flag==0)
acastiblancoc 0:0b4ace0e76db 112 {LECTURA_DATOS100();
acastiblancoc 0:0b4ace0e76db 113 flag++;}
acastiblancoc 0:0b4ace0e76db 114 else if (flag==1)
acastiblancoc 0:0b4ace0e76db 115 {LECTURA_DATOS500();
acastiblancoc 0:0b4ace0e76db 116 flag=0;
acastiblancoc 0:0b4ace0e76db 117 }
acastiblancoc 0:0b4ace0e76db 118 }
acastiblancoc 0:0b4ace0e76db 119 }
acastiblancoc 0:0b4ace0e76db 120 }