mirror of
https://gitlab.dit.htwk-leipzig.de/phillip.kuehne/dezibot.git
synced 2025-05-19 19:11:48 +02:00
93 lines
2.2 KiB
C++
93 lines
2.2 KiB
C++
/**
|
|
* @file MotionDetection.h
|
|
* @author Hans Haupt
|
|
* @brief This component controls the IMU (Accelerometer & Gyroscope) ICM-42670-P
|
|
* @version 0.1
|
|
* @date 2023-12-15
|
|
*
|
|
* @copyright Copyright (c) 2023
|
|
*
|
|
*/
|
|
#ifndef MotionDetection_h
|
|
#define MotionDetection_h
|
|
#include <SPI.h>
|
|
#include <Arduino.h>
|
|
#include "IMU_CMDs.h"
|
|
struct IMUResult{
|
|
int16_t x;
|
|
int16_t y;
|
|
int16_t z;
|
|
};
|
|
|
|
|
|
class MotionDetection{
|
|
protected:
|
|
enum registerBank{MREG1,MREG2,MREG3};
|
|
static const uint frequency = 10000000;
|
|
uint8_t readFromRegisterBank(registerBank bank,uint8_t reg);
|
|
void writeToRegisterBank(registerBank bank, uint8_t reg, uint8_t value);
|
|
void resetRegisterBankAccess();
|
|
|
|
uint16_t cmdRead(uint8_t regHigh,uint8_t regLow);
|
|
uint16_t cmdWrite(uint8_t regHigh,uint8_t regLow);
|
|
uint8_t cmdRead(uint8_t reg);
|
|
uint8_t cmdWrite(uint8_t reg);
|
|
|
|
uint8_t readRegister(uint8_t reg);
|
|
int16_t readDoubleRegister(uint8_t lowerReg);
|
|
void writeRegister(uint8_t reg, uint8_t value);
|
|
void initFIFO();
|
|
|
|
SPIClass * handler = NULL;
|
|
|
|
|
|
public:
|
|
MotionDetection();
|
|
|
|
/**
|
|
* @brief initialized the IMU Component.
|
|
* Wakes the IMU from Standby
|
|
* Set configuration
|
|
*
|
|
*/
|
|
void begin(void);
|
|
|
|
/**
|
|
* @brief stops the component
|
|
* Sets the IMU to Low-Power-Mode
|
|
*
|
|
*/
|
|
void end(void);
|
|
|
|
/**
|
|
* @brief Triggers a new Reading of the accelerationvalues and reads them from the IMU
|
|
*
|
|
* @return IMUResult that contains the new read values
|
|
*/
|
|
IMUResult getAcceleration();
|
|
|
|
/**
|
|
* @brief Triggers a new reading of the gyroscope and reads the values from the imu
|
|
*
|
|
* @return IMUResult
|
|
*/
|
|
IMUResult getRotation();
|
|
|
|
/**
|
|
* @brief Reads the current On Chip temperature of the IMU
|
|
*
|
|
* @return normalized temperature in degree Centigrade
|
|
*/
|
|
float getTemperature();
|
|
|
|
/**
|
|
* @brief Returns the value of reading the whoAmI register
|
|
* When IMU working correctly, value should be 0x67
|
|
*
|
|
* @return the value of the whoami register of the ICM-42670
|
|
*/
|
|
int8_t getWhoAmI();
|
|
|
|
void testFIFO();
|
|
};
|
|
#endif //MotionDetection
|