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); } }
FXPQ3115.cpp
- Committer:
- Pawel Zarembski
- Date:
- 2020-03-05
- Revision:
- 0:0b221579ed52
File content as of revision 0:0b221579ed52:
#include "FXPQ3115.h" #include "mbed.h" FXPQ3115::FXPQ3115(PinName sda, PinName scl) : _i2c(sda, scl) { } uint8_t FXPQ3115::sensor_init() { char write_value = FXPQ3115_WHO_AM_I; char read_value; if (SUCCESS != _i2c.write(FXPQ3115_I2C_ADDRESS_SHIFTED, &write_value, sizeof(write_value), true)) { return FAILURE; } if (SUCCESS != _i2c.read(FXPQ3115_I2C_ADDRESS_SHIFTED, &read_value, sizeof(read_value))) { return FAILURE; } if (read_value != FXPQ3115_WHOAMI_VALUE) { return FAILURE; } return SUCCESS; } uint8_t FXPQ3115::read_oneshotMode_bar() { uint8_t status; if (_config_bar() != SUCCESS) { return FAILURE; } if (_wait_for_acq() != SUCCESS) { return FAILURE; } char bar_data_write = FXPQ3115_OUT_P_MSB; status = _i2c.write(FXPQ3115_I2C_ADDRESS_SHIFTED, &bar_data_write, sizeof(bar_data_write), true); status |= _i2c.read(FXPQ3115_I2C_ADDRESS_SHIFTED, _bar_data, sizeof(_bar_data)); if (status != SUCCESS) { return FAILURE; } return SUCCESS; } uint32_t FXPQ3115::print_pressure() { uint32_t pressure = (_bar_data[0] << 16) | (_bar_data[1] << 8) | _bar_data[2]; return pressure / FXPQ3115_PRESSURE_CONV_FACTOR; } uint8_t FXPQ3115::_config_bar() { char bar_config[] = {FXPQ3115_CTRL_REG1, FXPQ3115_CTRL_REG1_ALT_BAR}; if (SUCCESS != _i2c.write(FXPQ3115_I2C_ADDRESS_SHIFTED, bar_config, 2, true)) { return FAILURE; } return SUCCESS; } uint8_t FXPQ3115::_wait_for_acq() { uint8_t status; char dataReady; char set_ost[] = {FXPQ3115_CTRL_REG1, FXPQ3115_CTRL_REG1_OST_SET}; if (SUCCESS != _i2c.write(FXPQ3115_I2C_ADDRESS_SHIFTED, set_ost, sizeof(set_ost))) { return FAILURE; } do { char get_ost = FXPQ3115_CTRL_REG1; status = _i2c.write(FXPQ3115_I2C_ADDRESS_SHIFTED, &get_ost, 1, true); status |= _i2c.read(FXPQ3115_I2C_ADDRESS_SHIFTED, &dataReady, 1); if (status != SUCCESS) { return FAILURE; } } /* Loop until sample acquisition is not completed */ while (0 != (dataReady & FXPQ3115_CTRL_REG1_OST_MASK)); return SUCCESS; }