Blue Pill Test MPU6050 Test LCD

Dependencies:   mbed mbed-STM32F103C8T6 MPU6050 TextLCD

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "stm32f103c8t6.h"
00002 #include "mbed.h"
00003 #include "MPU6050.h"
00004 #include "TextLCD.h"
00005 
00006  
00007 SPI spi_lcd(PB_15, NC, PB_13);
00008 MPU6050 mpu(PB_7, PB_6); // SDA, SCL pines de la comunicacion I2C 
00009 TextLCD_SPI lcd(&spi_lcd, PB_12, TextLCD::LCD16x2,TextLCD::HD44780); // SPI bus, CS pin, LCD Type ok
00010 DigitalOut ledr(PB_5);   //Led de conexion fallida 
00011 DigitalOut ledg(PB_4);   //Led de conexion OK
00012 DigitalOut ledb(PB_3);   //Led de envio de datos serial
00013 
00014 float AX,AY,AZ;  // variables para la conversion a aceleracion en m/s^2
00015 int estado=1; // variable que hacer repetir el ciclo de conexion con el MPU hasta que haya una conexion I2C satisfactoria
00016 int ax,ay,az; /// variables a imprimir
00017 int contador=0;
00018 
00019 int main() {
00020     lcd.cls();
00021     wait(0.50);
00022     //Posicionar al LCD en el espacio 0,0  ORIGEN
00023     lcd.locate(0,0);
00024     lcd.printf("Start PowerTip");
00025     wait(1.0);
00026     lcd.cls();
00027     
00028     ledr=0; //inicializacion de led (conexion fallida) off
00029     ledg=0; //inicializacion de led (conexion OK) off
00030     ledb=0; //inicializacion de led (envio de datos) off
00031  
00032     int accdata[3];  //se aparta el arreglo para la adquisiscion de datos de la aceleración
00033     int gyrodata[3]; //se aparta el arreglo para la adquisicion de datos del giroscopio 
00034     
00035     while(estado){ // inicia bucle para reconocimiento del estado 
00036     wait_ms(100);     // retardo para el inicio de las variables 
00037     if (mpu.testConnection()){ // lectura del estado de conexion del MPU 6050 
00038         lcd.printf("MPU connection succeeded\n\r"); //imprime en patalla que la conexion fue OK 
00039         
00040         //lcd.cls();
00041         estado=0; // cambio de estado de la variable se sale del ciclo una vez que la conexion esta OK
00042         ledg=1; // si la (conexion OK) led green enciende
00043         
00044         }
00045     else{
00046         lcd.printf("MPU connection failed\n\r");// Imprime en pantalla que la conexión fue fallida 
00047         //lcd.cls();
00048         estado=1; //Estado permanence en uno repitiendo el ciclo while(estado)
00049         ledr=1;  ///si la (conexion fallida) led rojo enciende
00050          
00051         }
00052         // retardo para preguntar sobre la conexion del MPU
00053         wait_ms(1000); /// Se hace cada segundo si es que la conexion fue fallida
00054         }
00055         ledr=0; // Se apaga led red una vez que la conexion fue OK 
00056     while(1) {
00057         contador++;
00058         //MPU6050_ACCEL_XOUT_H_REG se piden los datos de esta direcion
00059         // definición de los registros para pedir datos de acelerometro
00060         //MPU6050_ACCEL_XOUT_H_REG   0x3B
00061         //MPU6050_ACCEL_YOUT_H_REG   0x3D
00062         //MPU6050_ACCEL_ZOUT_H_REG   0x3F
00063         
00064         mpu.getAcceleroRaw(accdata); //Funcion para mandar llamar los datos del acelerometro
00065         
00066         mpu.getGyroRaw(gyrodata);  // funcion para mandar llamar los datos del giroscopio
00067         
00068         ax=(accdata[0])+(4175);  ///compenzación del offset del sensor
00069         ay=(accdata[1])-(12759); ///compenzación del offset del sensor
00070         az=(accdata[2])-(14029); ///compenzación del offset del sensor
00071         
00072         ///impresion de pantalla de lo datos puros de aceleracion 
00073         //pc.printf("Accelero data: X: %d - Y: %d - Z: %d\n\r", accdata[0], accdata[1], accdata[2]); 
00074        
00075         lcd.printf("X");       //Identificador para el software LABVIEW
00076         lcd.printf("%d ",ax); //Imprime los datos de aceleracion en 'X'
00077         lcd.printf("Y");       //Identificador para el software LABVIEW
00078         lcd.printf("%d ",ay); //Imprime los datos de aceleracion en 'Y'
00079         lcd.printf("Z");       //Identificador para el software LABVIEW
00080         lcd.printf("%d ",az); //Imprime los datos de aceleracion en 'Z'
00081        // lcd.cls();
00082         /// Impresion de panatalla de los datos del giroscopio
00083         /// pc.printf("Gyro data: X: %d - Y: %d - Z: %d\n\r\n\r", gyrodata[0], gyrodata[1], gyrodata[2]);
00084         if(contador==10)
00085         {
00086            ledb=!ledb;  //Cambio de estado del led blue (da un tono azul) al encender blue con green
00087         //indica un envio de datos serial correcto 
00088          contador=0;
00089             }
00090         
00091         
00092         wait_ms(100); // Retardo sincronizado con la interfaz grafica para el envio de datos
00093     }
00094         
00095         
00096 }