/** * @brief Test GYROSCOPE MEMS Hardware. * The main objectif of this test is to check the hardware connection of the * MEMS peripheral. * @param None * @retval None */ void GYRO_MEMS_Test(void) { /* Gyroscope variable */ float Buffer[3]; float Xval,Yval = 0x00; /* Read Gyro Angular data */ BSP_GYRO_GetXYZ(Buffer); /* Update autoreload and capture compare registers value*/ Xval = ABS((Buffer[0])); Yval = ABS((Buffer[1])); if(Xval>Yval) { if(Buffer[0] > 5000.0f) { /* LD10 On */ BSP_LED_On(LED10); HAL_Delay(10); } else if(Buffer[0] < -5000.0f) { /* LED3 On */ BSP_LED_On(LED3); HAL_Delay(10); } else { HAL_Delay(10); } } else { if(Buffer[1] < -5000.0f) { /* LD6 on */ BSP_LED_On(LED6); HAL_Delay(10); } else if(Buffer[1] > 5000.0f) { /* LD7 On */ BSP_LED_On(LED7); HAL_Delay(10); } else { HAL_Delay(10); } } BSP_LED_Off(LED3); BSP_LED_Off(LED6); BSP_LED_Off(LED7); BSP_LED_Off(LED4); BSP_LED_Off(LED10); BSP_LED_Off(LED8); BSP_LED_Off(LED9); BSP_LED_Off(LED5); }
/** * @brief Main program * @param None * @retval None */ int main(void) { // uint8_t R; uint8_t buf[10]; uint8_t buf_1[10]; uint8_t buf_2[10]; float pdd[3]; /* STM32F4xx HAL library initialization: - Configure the Flash prefetch, instruction and Data caches - Configure the Systick to generate an interrupt each 1 msec - Set NVIC Group Priority to 4 - Low Level Initialization */ HAL_Init(); SystemClock_Config(); BSP_LCD_Init(); BSP_LCD_LayerDefaultInit(LCD_FOREGROUND_LAYER, (LCD_FRAME_BUFFER + BUFFER_OFFSET)); /* Configure the transparency for foreground : Increase the transprency */ BSP_LCD_SetTransparency(LCD_BACKGROUND_LAYER, 0); BSP_LCD_SelectLayer(LCD_FOREGROUND_LAYER); BSP_GYRO_Init(); //R=BSP_GYRO_ReadID(); /* Configure the System clock to have a frequency of 180 MHz */ SystemClock_Config(); Delaimes(20); BSP_GYRO_Init(); Delaimes(4); BSP_LCD_SetBackColor(LCD_COLOR_BLACK); BSP_LCD_Clear(LCD_COLOR_BLACK ); BSP_LCD_SetTextColor(LCD_COLOR_BLUE); Delaimes(4); /* Infinite loop */ while (1) { BSP_GYRO_GetXYZ(pdd); sprintf(buf,"%.3f",pdd[0]); sprintf(buf_1,"%.3f",pdd[1]); sprintf(buf_2,"%.3f",pdd[2]); BSP_LCD_DisplayStringAtLine(0,buf); BSP_LCD_DisplayStringAtLine(1,buf_1); BSP_LCD_DisplayStringAtLine(2,buf_2); Delaimes(200); } }
void CmdGyro(int mode) { float xyz[3]; if(mode != CMD_INTERACTIVE) { return; } BSP_GYRO_GetXYZ(xyz); printf("Gyroscope returns:\n" " X: %d\n" " Y: %d\n" " Z: %d\n", (int)(xyz[0]*256), (int)(xyz[1]*256), (int)(xyz[2]*256)); }
/** * @brief Read Gyroscope Angular data. * @param None * @retval None */ static void GYRO_ReadAng(void) { /* Gyroscope variables */ float Buffer[3]; float Xval, Yval = 0x00; /* Init Gyroscope Mems */ if(BSP_GYRO_Init() != HAL_OK) { /* Initialization Error */ Error_Handler(); } /* Read Gyroscope Angular data */ BSP_GYRO_GetXYZ(Buffer); Xval = ABS((Buffer[0])); Yval = ABS((Buffer[1])); if(Xval>Yval) { if(Buffer[0] > 5000.0f) { /* LED5 On */ BSP_LED_On(LED5); HAL_Delay(10); } else if(Buffer[0] < -5000.0f) { /* LED4 On */ BSP_LED_On(LED4); HAL_Delay(10); } else { HAL_Delay(10); } } else { if(Buffer[1] < -5000.0f) { /* LED6 On */ BSP_LED_On(LED6); HAL_Delay(10); } else if(Buffer[1] > 5000.0f) { /* LED3 On */ BSP_LED_On(LED3); HAL_Delay(10); } else { HAL_Delay(10); } } BSP_LED_Off(LED3); BSP_LED_Off(LED4); BSP_LED_Off(LED5); BSP_LED_Off(LED6); }
/** * @brief MEMS demo * @param None * @retval None */ void MEMS_demo(void) { MEMS_SetHint(); if (BSP_GYRO_Init() != GYRO_OK) { BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()- 95, (uint8_t*)"ERROR", CENTER_MODE); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()- 80, (uint8_t*)"MEMS cannot be initialized", CENTER_MODE); } else { Gyroscope_DrawBackground(state); } BSP_GYRO_Reset(); while (1) { /* Read Gyro Angular data */ BSP_GYRO_GetXYZ(Buffer); /* Update autoreload and capture compare registers value */ Xval = ABS((Buffer[0])); Yval = ABS((Buffer[1])); Zval = ABS((Buffer[2])); if((Xval>Yval) && (Xval>Zval)) { if(Buffer[0] > 10000.0f) { if((state & 1) == 0) { Gyroscope_DrawBackground(1); state |= 1; HAL_Delay(1000); } } else if(Buffer[0] < -10000.0f) { if((state & 2) == 0) { Gyroscope_DrawBackground(2); state |= 2; HAL_Delay(1000); } } } else if ((Yval>Xval) && (Yval>Zval)) { if(Buffer[1] < -10000.0f) { if((state & 4) == 0) { Gyroscope_DrawBackground(4); state |= 4; HAL_Delay(1000); } } else if(Buffer[1] > 10000.0f) { if((state & 8) == 0) { Gyroscope_DrawBackground(8); state |= 8; HAL_Delay(1000); } } } else if ((Zval>Xval) && (Zval>Yval)) { if(Buffer[2] < -10000.0f) { if((state & 16) == 0) { Gyroscope_DrawBackground(16); state |= 16; HAL_Delay(1000); } } else if(Buffer[2] > 10000.0f) { if((state & 32) == 0) { Gyroscope_DrawBackground(32); state |= 32; HAL_Delay(1000); } } } if (state != 0x3F) { } else if (CheckForUserInput() > 0) { state = 0; return; } } }