Driver for FXPQ3115 sensor.

Example usage

main.cpp

#include "mbed.h"
#include "FXPQ3115.h"

FXPQ3115 pressure_sensor(P0_13, P0_14);

int main()
{
    pressure_sensor.sensor_init();

    while (1) {
        pressure_sensor.read_oneshotMode_bar();
        printf("Pressure in Pascals: %d\n", pressure_sensor.print_pressure());
        thread_sleep_for(20000);
    }
}
Committer:
Pawel Zarembski
Date:
Thu Mar 05 11:13:50 2020 +0100
Revision:
0:0b221579ed52
initial version, one shot mode for pressure only

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Pawel Zarembski 0:0b221579ed52 1 #include "FXPQ3115.h"
Pawel Zarembski 0:0b221579ed52 2 #include "mbed.h"
Pawel Zarembski 0:0b221579ed52 3
Pawel Zarembski 0:0b221579ed52 4 FXPQ3115::FXPQ3115(PinName sda, PinName scl) : _i2c(sda, scl)
Pawel Zarembski 0:0b221579ed52 5 {
Pawel Zarembski 0:0b221579ed52 6
Pawel Zarembski 0:0b221579ed52 7 }
Pawel Zarembski 0:0b221579ed52 8
Pawel Zarembski 0:0b221579ed52 9 uint8_t FXPQ3115::sensor_init()
Pawel Zarembski 0:0b221579ed52 10 {
Pawel Zarembski 0:0b221579ed52 11 char write_value = FXPQ3115_WHO_AM_I;
Pawel Zarembski 0:0b221579ed52 12 char read_value;
Pawel Zarembski 0:0b221579ed52 13 if (SUCCESS != _i2c.write(FXPQ3115_I2C_ADDRESS_SHIFTED,
Pawel Zarembski 0:0b221579ed52 14 &write_value, sizeof(write_value), true)) {
Pawel Zarembski 0:0b221579ed52 15 return FAILURE;
Pawel Zarembski 0:0b221579ed52 16 }
Pawel Zarembski 0:0b221579ed52 17 if (SUCCESS != _i2c.read(FXPQ3115_I2C_ADDRESS_SHIFTED, &read_value,
Pawel Zarembski 0:0b221579ed52 18 sizeof(read_value))) {
Pawel Zarembski 0:0b221579ed52 19 return FAILURE;
Pawel Zarembski 0:0b221579ed52 20 }
Pawel Zarembski 0:0b221579ed52 21 if (read_value != FXPQ3115_WHOAMI_VALUE) {
Pawel Zarembski 0:0b221579ed52 22 return FAILURE;
Pawel Zarembski 0:0b221579ed52 23 }
Pawel Zarembski 0:0b221579ed52 24 return SUCCESS;
Pawel Zarembski 0:0b221579ed52 25 }
Pawel Zarembski 0:0b221579ed52 26
Pawel Zarembski 0:0b221579ed52 27 uint8_t FXPQ3115::read_oneshotMode_bar()
Pawel Zarembski 0:0b221579ed52 28 {
Pawel Zarembski 0:0b221579ed52 29 uint8_t status;
Pawel Zarembski 0:0b221579ed52 30 if (_config_bar() != SUCCESS) {
Pawel Zarembski 0:0b221579ed52 31 return FAILURE;
Pawel Zarembski 0:0b221579ed52 32 }
Pawel Zarembski 0:0b221579ed52 33
Pawel Zarembski 0:0b221579ed52 34 if (_wait_for_acq() != SUCCESS) {
Pawel Zarembski 0:0b221579ed52 35 return FAILURE;
Pawel Zarembski 0:0b221579ed52 36 }
Pawel Zarembski 0:0b221579ed52 37
Pawel Zarembski 0:0b221579ed52 38 char bar_data_write = FXPQ3115_OUT_P_MSB;
Pawel Zarembski 0:0b221579ed52 39 status = _i2c.write(FXPQ3115_I2C_ADDRESS_SHIFTED, &bar_data_write,
Pawel Zarembski 0:0b221579ed52 40 sizeof(bar_data_write), true);
Pawel Zarembski 0:0b221579ed52 41 status |= _i2c.read(FXPQ3115_I2C_ADDRESS_SHIFTED, _bar_data, sizeof(_bar_data));
Pawel Zarembski 0:0b221579ed52 42
Pawel Zarembski 0:0b221579ed52 43 if (status != SUCCESS) {
Pawel Zarembski 0:0b221579ed52 44 return FAILURE;
Pawel Zarembski 0:0b221579ed52 45 }
Pawel Zarembski 0:0b221579ed52 46
Pawel Zarembski 0:0b221579ed52 47 return SUCCESS;
Pawel Zarembski 0:0b221579ed52 48 }
Pawel Zarembski 0:0b221579ed52 49
Pawel Zarembski 0:0b221579ed52 50 uint32_t FXPQ3115::print_pressure()
Pawel Zarembski 0:0b221579ed52 51 {
Pawel Zarembski 0:0b221579ed52 52 uint32_t pressure = (_bar_data[0] << 16) | (_bar_data[1] << 8) | _bar_data[2];
Pawel Zarembski 0:0b221579ed52 53 return pressure / FXPQ3115_PRESSURE_CONV_FACTOR;
Pawel Zarembski 0:0b221579ed52 54 }
Pawel Zarembski 0:0b221579ed52 55
Pawel Zarembski 0:0b221579ed52 56 uint8_t FXPQ3115::_config_bar()
Pawel Zarembski 0:0b221579ed52 57 {
Pawel Zarembski 0:0b221579ed52 58 char bar_config[] = {FXPQ3115_CTRL_REG1, FXPQ3115_CTRL_REG1_ALT_BAR};
Pawel Zarembski 0:0b221579ed52 59 if (SUCCESS != _i2c.write(FXPQ3115_I2C_ADDRESS_SHIFTED, bar_config, 2, true)) {
Pawel Zarembski 0:0b221579ed52 60 return FAILURE;
Pawel Zarembski 0:0b221579ed52 61 }
Pawel Zarembski 0:0b221579ed52 62 return SUCCESS;
Pawel Zarembski 0:0b221579ed52 63 }
Pawel Zarembski 0:0b221579ed52 64
Pawel Zarembski 0:0b221579ed52 65 uint8_t FXPQ3115::_wait_for_acq()
Pawel Zarembski 0:0b221579ed52 66 {
Pawel Zarembski 0:0b221579ed52 67 uint8_t status;
Pawel Zarembski 0:0b221579ed52 68 char dataReady;
Pawel Zarembski 0:0b221579ed52 69 char set_ost[] = {FXPQ3115_CTRL_REG1, FXPQ3115_CTRL_REG1_OST_SET};
Pawel Zarembski 0:0b221579ed52 70 if (SUCCESS != _i2c.write(FXPQ3115_I2C_ADDRESS_SHIFTED, set_ost, sizeof(set_ost))) {
Pawel Zarembski 0:0b221579ed52 71 return FAILURE;
Pawel Zarembski 0:0b221579ed52 72 }
Pawel Zarembski 0:0b221579ed52 73
Pawel Zarembski 0:0b221579ed52 74 do
Pawel Zarembski 0:0b221579ed52 75 {
Pawel Zarembski 0:0b221579ed52 76 char get_ost = FXPQ3115_CTRL_REG1;
Pawel Zarembski 0:0b221579ed52 77 status = _i2c.write(FXPQ3115_I2C_ADDRESS_SHIFTED, &get_ost, 1, true);
Pawel Zarembski 0:0b221579ed52 78 status |= _i2c.read(FXPQ3115_I2C_ADDRESS_SHIFTED, &dataReady, 1);
Pawel Zarembski 0:0b221579ed52 79 if (status != SUCCESS) {
Pawel Zarembski 0:0b221579ed52 80 return FAILURE;
Pawel Zarembski 0:0b221579ed52 81 }
Pawel Zarembski 0:0b221579ed52 82 } /* Loop until sample acquisition is not completed */
Pawel Zarembski 0:0b221579ed52 83 while (0 != (dataReady & FXPQ3115_CTRL_REG1_OST_MASK));
Pawel Zarembski 0:0b221579ed52 84
Pawel Zarembski 0:0b221579ed52 85 return SUCCESS;
Pawel Zarembski 0:0b221579ed52 86 }