Alyson Castiblanco
/
MPU6050_PRIMER_MUESTREO
PRIMER MUESTREO DE LA IMU
Diff: main.cpp
- Revision:
- 0:0b4ace0e76db
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Aug 24 20:27:34 2019 +0000 @@ -0,0 +1,120 @@ +#include "mbed.h" + +Serial pc(SERIAL_TX, SERIAL_RX); // (TX, RX) +I2C i2c(PB_9, PB_8 ); // (SDA, SCL) +DigitalIn boton (USER_BUTTON); +const int addr = 0xD0; // 7 bit I2C address. Accede a la comunicacion I2C +char cmd[2]; +char read_buffer[14]; +int16_t acc_x = 0, acc_y = 0, acc_z = 0; +int16_t gyr_x = 0, gyr_y = 0, gyr_z = 0; +int16_t temp = 0; +int flag=0; +float ACC_SEN = 16384.0; //Resolución ACC +float GYR_SEN = 131.0; //Resolución GYR +float TEM_SEN = 340.0; //Resolución temp + +float facc_x = 0, facc_y = 0, facc_z = 0; +float fgyr_x = 0, fgyr_y = 0, fgyr_z = 0; +float ftemp = 0; + +DigitalOut myled(LED1); + + +void LECTURA_DATOS100 () +{ + for(int i=0; i<=100;i++) + { + wait_ms(10); + cmd[0]=0x3B; + i2c.write(addr, cmd, 1); //Escritura del registro de inicio, comienza a revisar los diferentes registros segun su orden. + //Por eso el orden de impresion y el tamaño del buffer (14) + i2c.read(addr, read_buffer, 14); //Lectura en rafaga de los valores de la MPU + + //.................Construcción de la medición de los valores .................. + acc_x = read_buffer[0]<<8 | read_buffer[1]; + acc_y = read_buffer[2]<<8 | read_buffer[3]; + acc_z = read_buffer[4]<<8 | read_buffer[5]; + temp = read_buffer[6]<<8 | read_buffer[7]; + gyr_x = read_buffer[8]<<8 | read_buffer[9]; + gyr_y = read_buffer[10]<<8 | read_buffer[11]; + gyr_z = read_buffer[12]<<8 | read_buffer[13]; + + facc_x = acc_x/ACC_SEN; + facc_y = acc_y/ACC_SEN; + facc_z = acc_z/ACC_SEN; + fgyr_x = gyr_x/GYR_SEN; + fgyr_y = gyr_y/GYR_SEN; + fgyr_z = gyr_z/GYR_SEN; + ftemp= ((temp)/TEM_SEN)+36.53; + 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); + pc.printf("MUESTRA NO. %i\n", i); + pc.printf("MUESTRA NO. %i\n", i); + + } + } + + + +void LECTURA_DATOS500 () +{ + for(int i=0; i<=500;i++) + { + wait_ms(10); + cmd[0]=0x3B; + i2c.write(addr, cmd, 1); //Escritura del registro de inicio, comienza a revisar los diferentes registros segun su orden. + //Por eso el orden de impresion y el tamaño del buffer (14) + i2c.read(addr, read_buffer, 14); //Lectura en rafaga de los valores de la MPU + + //.................Construcción de la medición de los valores .................. + acc_x = read_buffer[0]<<8 | read_buffer[1]; + acc_y = read_buffer[2]<<8 | read_buffer[3]; + acc_z = read_buffer[4]<<8 | read_buffer[5]; + temp = read_buffer[6]<<8 | read_buffer[7]; + gyr_x = read_buffer[8]<<8 | read_buffer[9]; + gyr_y = read_buffer[10]<<8 | read_buffer[11]; + gyr_z = read_buffer[12]<<8 | read_buffer[13]; + + facc_x = acc_x/ACC_SEN; + facc_y = acc_y/ACC_SEN; + facc_z = acc_z/ACC_SEN; + fgyr_x = gyr_x/GYR_SEN; + fgyr_y = gyr_y/GYR_SEN; + fgyr_z = gyr_z/GYR_SEN; + ftemp= ((temp)/TEM_SEN)+36.53; + 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); + pc.printf("MUESTRA NO. %i\n", i); + + } + } + +int main() +{ + pc.printf("Prueba MPU6050 \n\r"); + + cmd[0] = 0x6B; + cmd[1] = 0x00; + i2c.write(addr, cmd, 2); //Desactivar modo hibernación + + cmd[0] = 0x1B; + cmd[1] = 0x00; + i2c.write(addr, cmd, 2); //gyro full scale 250 DPS + + cmd[0] = 0x1C; + cmd[1] = 0x00; + i2c.write(addr, cmd, 2); //ACC fullsclae 2G + + while(1) { + + if(boton==0) + { + if (flag==0) + {LECTURA_DATOS100(); + flag++;} + else if (flag==1) + {LECTURA_DATOS500(); + flag=0; + } + } + } +} \ No newline at end of file