From 9c5cd659785b74ab3d36abd56ec28e5afe57bb56 Mon Sep 17 00:00:00 2001 From: jeanr Date: Tue, 20 Jan 2026 10:04:31 +0100 Subject: [PATCH] Add methods to read raw ACC and GYR data from FIFO --- library.properties | 2 +- src/ISM330DHCXSensor.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ src/ISM330DHCXSensor.h | 2 ++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/library.properties b/library.properties index f6dc0b8..c9ec34d 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=STM32duino ISM330DHCX -version=2.1.1 +version=2.1.2 author=SRA maintainer=stm32duino sentence=High-Performance 3D digital accelerometer and 3D digital gyroscope. diff --git a/src/ISM330DHCXSensor.cpp b/src/ISM330DHCXSensor.cpp index 16b4b72..7b14855 100644 --- a/src/ISM330DHCXSensor.cpp +++ b/src/ISM330DHCXSensor.cpp @@ -2177,6 +2177,26 @@ ISM330DHCXStatusTypeDef ISM330DHCXSensor::FIFO_ACC_Get_Axes(int32_t *Acceleratio return ISM330DHCX_OK; } +/** + * @brief Get the ISM330DHCX FIFO accelero single sample (16-bit data per 3 axes) raw data + * @param Acceleration FIFO accelerometer raw axes reading + * @retval 0 in case of success, an error code otherwise + */ +ISM330DHCXStatusTypeDef ISM330DHCXSensor::FIFO_ACC_Get_AxesRaw(int16_t *AccelerationRaw) +{ + uint8_t data[6]; + + if (FIFO_Get_Data(data) != ISM330DHCX_OK) { + return ISM330DHCX_ERROR; + } + + AccelerationRaw[0] = ((int16_t)data[1] << 8) | data[0]; + AccelerationRaw[1] = ((int16_t)data[3] << 8) | data[2]; + AccelerationRaw[2] = ((int16_t)data[5] << 8) | data[4]; + + return ISM330DHCX_OK; +} + /** * @brief Get the ISM330DHCX FIFO gyro single sample (16-bit data per 3 axes) and calculate angular velocity [mDPS] * @param AngularVelocity FIFO gyroscope axes [mDPS] @@ -2212,6 +2232,26 @@ ISM330DHCXStatusTypeDef ISM330DHCXSensor::FIFO_GYRO_Get_Axes(int32_t *AngularVel return ISM330DHCX_OK; } +/** + * @brief Get the ISM330DHCX FIFO gyro single sample (16-bit data per 3 axes) raw data + * @param AngularVelocity FIFO gyroscope raw axes reading + * @retval 0 in case of success, an error code otherwise + */ +ISM330DHCXStatusTypeDef ISM330DHCXSensor::FIFO_GYRO_Get_AxesRaw(int16_t *AngularVelocityRaw) +{ + uint8_t data[6]; + + if (FIFO_Get_Data(data) != ISM330DHCX_OK) { + return ISM330DHCX_ERROR; + } + + AngularVelocityRaw[0] = ((int16_t)data[1] << 8) | data[0]; + AngularVelocityRaw[1] = ((int16_t)data[3] << 8) | data[2]; + AngularVelocityRaw[2] = ((int16_t)data[5] << 8) | data[4]; + + return ISM330DHCX_OK; +} + /** * @brief Enable ISM330DHCX accelerometer DRDY interrupt on INT1 * @retval 0 in case of success, an error code otherwise diff --git a/src/ISM330DHCXSensor.h b/src/ISM330DHCXSensor.h index c210881..0df3834 100644 --- a/src/ISM330DHCXSensor.h +++ b/src/ISM330DHCXSensor.h @@ -152,7 +152,9 @@ class ISM330DHCXSensor { ISM330DHCXStatusTypeDef FIFO_Get_Tag(uint8_t *Tag); ISM330DHCXStatusTypeDef FIFO_Get_Data(uint8_t *Data); ISM330DHCXStatusTypeDef FIFO_ACC_Get_Axes(int32_t *Acceleration); + ISM330DHCXStatusTypeDef FIFO_ACC_Get_AxesRaw(int16_t *AccelerationRaw); ISM330DHCXStatusTypeDef FIFO_GYRO_Get_Axes(int32_t *AngularVelocity); + ISM330DHCXStatusTypeDef FIFO_GYRO_Get_AxesRaw(int16_t *AngularVelocityRaw); ISM330DHCXStatusTypeDef ACC_Enable_DRDY_On_INT1(); ISM330DHCXStatusTypeDef ACC_Disable_DRDY_On_INT1();