you can use LPS25HB sensor on mbed. i2c
Dependents: read_Pmod optWingforHAPS_Eigen hexaTest_Eigen
LPS.h@2:c178d72753dc, 2022-09-01 (annotated)
- Committer:
- NaotoMorita
- Date:
- Thu Sep 01 14:04:43 2022 +0000
- Revision:
- 2:c178d72753dc
- Parent:
- 1:8f3d064a154b
os 6
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tajiri1999 | 0:4ea758df868a | 1 | #ifndef LPS_h |
tajiri1999 | 0:4ea758df868a | 2 | #define LPS_h |
tajiri1999 | 0:4ea758df868a | 3 | |
tajiri1999 | 0:4ea758df868a | 4 | #include "mbed.h" // for int8_t data type |
tajiri1999 | 0:4ea758df868a | 5 | |
tajiri1999 | 0:4ea758df868a | 6 | class LPS |
tajiri1999 | 0:4ea758df868a | 7 | { |
tajiri1999 | 0:4ea758df868a | 8 | public: |
tajiri1999 | 0:4ea758df868a | 9 | enum deviceType { device_331AP, device_25H, device_auto }; |
tajiri1999 | 0:4ea758df868a | 10 | enum sa0State { sa0_low, sa0_high, sa0_auto }; |
tajiri1999 | 0:4ea758df868a | 11 | |
tajiri1999 | 0:4ea758df868a | 12 | // register addresses |
tajiri1999 | 0:4ea758df868a | 13 | // Note: where register names differ between the register mapping table and |
tajiri1999 | 0:4ea758df868a | 14 | // the register descriptions in the datasheets, the names from the register |
tajiri1999 | 0:4ea758df868a | 15 | // descriptions are used here. |
tajiri1999 | 0:4ea758df868a | 16 | enum regAddr |
tajiri1999 | 0:4ea758df868a | 17 | { |
tajiri1999 | 0:4ea758df868a | 18 | REF_P_XL = 0x08, |
tajiri1999 | 0:4ea758df868a | 19 | REF_P_L = 0x09, |
tajiri1999 | 0:4ea758df868a | 20 | REF_P_H = 0x0A, |
tajiri1999 | 0:4ea758df868a | 21 | |
tajiri1999 | 0:4ea758df868a | 22 | WHO_AM_I = 0x0F, |
tajiri1999 | 0:4ea758df868a | 23 | |
tajiri1999 | 0:4ea758df868a | 24 | RES_CONF = 0x10, |
tajiri1999 | 0:4ea758df868a | 25 | |
tajiri1999 | 0:4ea758df868a | 26 | CTRL_REG1 = 0x20, |
tajiri1999 | 0:4ea758df868a | 27 | CTRL_REG2 = 0x21, |
tajiri1999 | 0:4ea758df868a | 28 | CTRL_REG3 = 0x22, |
osaka | 1:8f3d064a154b | 29 | CTRL_REG_4 = 0x23, // 25H |
tajiri1999 | 0:4ea758df868a | 30 | |
tajiri1999 | 0:4ea758df868a | 31 | STATUS_REG = 0x27, |
tajiri1999 | 0:4ea758df868a | 32 | |
tajiri1999 | 0:4ea758df868a | 33 | PRESS_OUT_XL = 0x28, |
tajiri1999 | 0:4ea758df868a | 34 | PRESS_OUT_L = 0x29, |
tajiri1999 | 0:4ea758df868a | 35 | PRESS_OUT_H = 0x2A, |
tajiri1999 | 0:4ea758df868a | 36 | |
tajiri1999 | 0:4ea758df868a | 37 | TEMP_OUT_L = 0x2B, |
tajiri1999 | 0:4ea758df868a | 38 | TEMP_OUT_H = 0x2C, |
tajiri1999 | 0:4ea758df868a | 39 | |
osaka | 1:8f3d064a154b | 40 | FIFO_CTRL_ = 0x2E, // 25H |
tajiri1999 | 0:4ea758df868a | 41 | FIFO_STATUS = 0x2F, // 25H |
tajiri1999 | 0:4ea758df868a | 42 | |
tajiri1999 | 0:4ea758df868a | 43 | AMP_CTRL = 0x30, // 331AP |
tajiri1999 | 0:4ea758df868a | 44 | |
tajiri1999 | 0:4ea758df868a | 45 | RPDS_L = 0x39, // 25H |
tajiri1999 | 0:4ea758df868a | 46 | RPDS_H = 0x3A, // 25H |
tajiri1999 | 0:4ea758df868a | 47 | |
tajiri1999 | 0:4ea758df868a | 48 | DELTA_PRESS_XL = 0x3C, // 331AP |
tajiri1999 | 0:4ea758df868a | 49 | DELTA_PRESS_L = 0x3D, // 331AP |
tajiri1999 | 0:4ea758df868a | 50 | DELTA_PRESS_H = 0x3E, // 331AP |
tajiri1999 | 0:4ea758df868a | 51 | |
tajiri1999 | 0:4ea758df868a | 52 | |
tajiri1999 | 0:4ea758df868a | 53 | // dummy addresses for registers in different locations on different devices; |
tajiri1999 | 0:4ea758df868a | 54 | // the library translates these based on device type |
tajiri1999 | 0:4ea758df868a | 55 | // value with sign flipped is used as index into translated_regs array |
tajiri1999 | 0:4ea758df868a | 56 | |
tajiri1999 | 0:4ea758df868a | 57 | INTERRUPT_CFG = -1, |
tajiri1999 | 0:4ea758df868a | 58 | INT_SOURCE = -2, |
tajiri1999 | 0:4ea758df868a | 59 | THS_P_L = -3, |
tajiri1999 | 0:4ea758df868a | 60 | THS_P_H = -4, |
tajiri1999 | 0:4ea758df868a | 61 | // update dummy_reg_count if registers are added here! |
tajiri1999 | 0:4ea758df868a | 62 | |
tajiri1999 | 0:4ea758df868a | 63 | |
tajiri1999 | 0:4ea758df868a | 64 | // device-specific register addresses |
tajiri1999 | 0:4ea758df868a | 65 | |
tajiri1999 | 0:4ea758df868a | 66 | LPS331AP_INTERRUPT_CFG = 0x23, |
tajiri1999 | 0:4ea758df868a | 67 | LPS331AP_INT_SOURCE = 0x24, |
tajiri1999 | 0:4ea758df868a | 68 | LPS331AP_THS_P_L = 0x25, |
tajiri1999 | 0:4ea758df868a | 69 | LPS331AP_THS_P_H = 0x26, |
tajiri1999 | 0:4ea758df868a | 70 | |
tajiri1999 | 0:4ea758df868a | 71 | LPS25H_INTERRUPT_CFG = 0x24, |
tajiri1999 | 0:4ea758df868a | 72 | LPS25H_INT_SOURCE = 0x25, |
tajiri1999 | 0:4ea758df868a | 73 | LPS25H_THS_P_L = 0x30, |
tajiri1999 | 0:4ea758df868a | 74 | LPS25H_THS_P_H = 0x31, |
tajiri1999 | 0:4ea758df868a | 75 | }; |
tajiri1999 | 0:4ea758df868a | 76 | |
tajiri1999 | 0:4ea758df868a | 77 | LPS(I2C& p_i2c); |
tajiri1999 | 0:4ea758df868a | 78 | |
tajiri1999 | 0:4ea758df868a | 79 | bool init(deviceType device = device_auto,uint8_t sa0 = sa0_auto); |
tajiri1999 | 0:4ea758df868a | 80 | deviceType getDeviceType(void) { return _device; } |
tajiri1999 | 0:4ea758df868a | 81 | int8_t getAddress(void) { return address; } |
tajiri1999 | 0:4ea758df868a | 82 | |
tajiri1999 | 0:4ea758df868a | 83 | void enableDefault(void); |
tajiri1999 | 0:4ea758df868a | 84 | |
tajiri1999 | 0:4ea758df868a | 85 | void writeReg(char reg, char value); |
tajiri1999 | 0:4ea758df868a | 86 | int8_t readReg(char reg); |
tajiri1999 | 0:4ea758df868a | 87 | |
tajiri1999 | 0:4ea758df868a | 88 | float readPressureMillibars(void); |
tajiri1999 | 0:4ea758df868a | 89 | float readPressureInchesHg(void); |
tajiri1999 | 0:4ea758df868a | 90 | int32_t readPressureRaw(void); |
tajiri1999 | 0:4ea758df868a | 91 | float readTemperatureC(void); |
tajiri1999 | 0:4ea758df868a | 92 | float readTemperatureF(void); |
tajiri1999 | 0:4ea758df868a | 93 | int16_t readTemperatureRaw(void); |
tajiri1999 | 0:4ea758df868a | 94 | |
tajiri1999 | 0:4ea758df868a | 95 | static float pressureToAltitudeMeters(double pressure_mbar, double altimeter_setting_mbar = 1013.25); |
tajiri1999 | 0:4ea758df868a | 96 | static float pressureToAltitudeFeet(double pressure_inHg, double altimeter_setting_inHg = 29.9213); |
tajiri1999 | 0:4ea758df868a | 97 | |
tajiri1999 | 0:4ea758df868a | 98 | private: |
tajiri1999 | 0:4ea758df868a | 99 | deviceType _device; // chip type (331AP or 25H) |
tajiri1999 | 0:4ea758df868a | 100 | I2C &_i2c; |
tajiri1999 | 0:4ea758df868a | 101 | uint8_t address; |
tajiri1999 | 0:4ea758df868a | 102 | |
tajiri1999 | 0:4ea758df868a | 103 | static const int dummy_reg_count = 4; |
tajiri1999 | 0:4ea758df868a | 104 | regAddr translated_regs[dummy_reg_count + 1]; // index 0 not used |
tajiri1999 | 0:4ea758df868a | 105 | |
tajiri1999 | 0:4ea758df868a | 106 | bool detectDeviceAndAddress(deviceType device, sa0State sa0); |
tajiri1999 | 0:4ea758df868a | 107 | bool detectDevice(deviceType device); |
tajiri1999 | 0:4ea758df868a | 108 | int testWhoAmI(uint8_t address); |
tajiri1999 | 0:4ea758df868a | 109 | }; |
tajiri1999 | 0:4ea758df868a | 110 | |
tajiri1999 | 0:4ea758df868a | 111 | #endif |