Example #1
0
/**
 * @brief  Read LPS25HB output register, and calculate the pressure in mbar
 * @param  pfData the pressure value in mbar
 * @retval PRESSURE_OK in case of success, an error code otherwise
 */
static PRESSURE_StatusTypeDef LPS25HB_GetPressure(float* pfData)
{
    int32_t raw_press = 0;

    if(LPS25HB_I2C_ReadRawPressure(&raw_press) != PRESSURE_OK)
    {
        return PRESSURE_ERROR;
    }

    *pfData = (float)raw_press / 4096.0f;

    return PRESSURE_OK;
}
Example #2
0
/**
 * @brief  Read LPS25HB output register, and calculate the pressure in mbar
 * @param  pfData the pressure value in mbar
 * @retval PRESSURE_OK in case of success, an error code otherwise
 */
static PRESSURE_StatusTypeDef LPS25HB_GetPressure(float* pfData)
{
    uint32_t raw_press = 0;
    uint8_t tmp = 0x00;
    
    if(LPS25HB_IO_Read(&tmp, LPS25HB_SlaveAddress, LPS25HB_CTRL_REG1_ADDR, 1) != PRESSURE_OK)
    {
      return PRESSURE_ERROR;
    }

    /* Output Data Rate selection */
    tmp &= (LPS25HB_ODR_MASK);
    
    if(tmp == 0x00)
    {
      if(LPS25HB_IO_Read(&tmp, LPS25HB_SlaveAddress, LPS25HB_CTRL_REG2_ADDR, 1) != PRESSURE_OK)
      {
        return PRESSURE_ERROR;
      }

      /* Serial Interface Mode selection */
      tmp &= ~(LPS25HB_ONE_SHOT_MASK);
      tmp |= LPS25HB_ONE_SHOT_START;

      if(LPS25HB_IO_Write(&tmp, LPS25HB_SlaveAddress, LPS25HB_CTRL_REG2_ADDR, 1) != PRESSURE_OK)
      {
        return PRESSURE_ERROR;
      }
    
      do{
      
        if(LPS25HB_IO_Read(&tmp, LPS25HB_SlaveAddress, LPS25HB_STATUS_REG_ADDR, 1) != PRESSURE_OK)
        {
          return PRESSURE_ERROR;
        }
       
      }while(!(tmp&&0x01));
    }    

    if(LPS25HB_I2C_ReadRawPressure(&raw_press) != PRESSURE_OK)
    {
      return PRESSURE_ERROR;
    }

    *pfData = (float)raw_press /4096.0f;
    
    return PRESSURE_OK;
}