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@0:0b221579ed52, 2020-03-05 (annotated)
- 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?
User | Revision | Line number | New 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 | } |