diff --git a/Inc/Accel_QMA6100P.h b/Inc/Accel_QMA6100P.h index 120b8de..fa4bdb9 100644 --- a/Inc/Accel_QMA6100P.h +++ b/Inc/Accel_QMA6100P.h @@ -57,7 +57,11 @@ typedef enum { ACCEL_QMA6100P_RANGE_REG_32G = 0b1111, } eAccelQma6100pRangesReg; - +typedef struct { + int32_t x; + int32_t y; + int32_t z; +} tAccelCoor; typedef struct { tSpiPortIO *port; @@ -66,6 +70,8 @@ typedef struct { //только через setter //private eAccelQma6100pRanges range; + + tAccelCoor xyz; } tAccelQma6100P; void AccelQma6100P_Init(tAccelQma6100P *env, tSpiPortIO *accelIO); diff --git a/Src/Accel_QMA6100P.c b/Src/Accel_QMA6100P.c index b1d9c52..8121dc3 100644 --- a/Src/Accel_QMA6100P.c +++ b/Src/Accel_QMA6100P.c @@ -22,13 +22,12 @@ static bool vAccelWriteReg(tAccelQma6100P *env, uint8_t reg, uint8_t value, uint QMA6100P_RINO(SpiPortTransmit(env->port, &value_reg, timeout)) QMA6100P_RINO(SpiPortChipRelease(env->port, timeout)) - + SystemDelayMs(50); return true; } static bool vAccelReadReg(tAccelQma6100P *env, uint8_t reg, uint8_t *data, uint32_t timeout) { - uint16_t back; uint16_t adr_reg = reg | 0x80; @@ -159,6 +158,7 @@ bool AccelQma6100P_ConfigureDefaults(tAccelQma6100P *env) { //todo return on error, сделать вывод с ошибкой (false) в случае сбоя при записи конфигурации + SystemDelayMs(200); return true; } @@ -211,6 +211,15 @@ bool AccelQma6100P_ReadOne(tAccelQma6100P *env, uint8_t firstReg, float *value) int32_t valueMicroG = rowValue * env->range; + if (firstReg == QMA6100P_REG_ACC_X_L) + env->xyz.x = valueMicroG; + + if (firstReg == QMA6100P_REG_ACC_Y_L) + env->xyz.y = valueMicroG; + + if (firstReg == QMA6100P_REG_ACC_Z_L) + env->xyz.z = valueMicroG; + *value = roundf(valueMicroG) / 1000000.f; return true;