1
0
This repository has been archived on 2021-11-13. You can view files and clone it, but cannot push or open issues or pull requests.
2019-12-07 14:14:58 +01:00

40 lines
1.1 KiB
C

/*
* sensor_interface.c
*
* Created on: 7 déc. 2019
* Author: JackCarterSmith
*/
#include "sensor_interface.h"
#include "i2c.h"
#include "math.h"
void initGyro() {
uint8_t MEMS_ODR_CONFIG []= {0x88};
//Configure all configurations datas for sensor chip
HAL_I2C_Mem_Write(&hi2c2,MEMS_ADD_WR,CTRL1_XL_REGISTER,1,MEMS_ODR_CONFIG,1,HAL_TIMEOUT);
}
/**
* @brief function to retrieve values from sensors and calculate angles from it
*/
void getAnglesFromSensor(PP_GyroAnglesTypeDef *anglesVar) {
int16_t OUTX_XL[1],OUTY_XL[1],OUTZ_XL[1];
float tempX, tempY, tempZ;
HAL_I2C_Mem_Read(&hi2c2, MEMS_ADD_RD, 0x28, 1, (uint8_t*)&OUTX_XL, 2, HAL_TIMEOUT);
HAL_I2C_Mem_Read(&hi2c2, MEMS_ADD_RD, 0x2A, 1, (uint8_t*)&OUTY_XL, 2, HAL_TIMEOUT);
HAL_I2C_Mem_Read(&hi2c2, MEMS_ADD_RD, 0x2C, 1, (uint8_t*)&OUTZ_XL, 2, HAL_TIMEOUT);
tempX = (float)OUTX_XL[0];
tempY = (float)OUTY_XL[0];
tempZ = (float)OUTZ_XL[0];
anglesVar->Pitch = (int16_t)atanf(-tempY / tempZ) * 60;
anglesVar->Yaw = (int16_t)atanf(-tempX / tempZ) * 60;
anglesVar->Roll = (int16_t)atanf(-tempX / tempY) * 60;
}