you can use LPS25HB sensor on mbed.

Dependents:   cansattougoutest mbed_LPS25HB koubousattttttttttttttttttttttdddddyorooooo koubousattttttttttttttttttttttddooaass ... more

Committer:
tajiri1999
Date:
Sat Dec 22 16:44:40 2018 +0000
Revision:
0:4ea758df868a
LPS25HB_i2c for mbed

Who changed what in which revision?

UserRevisionLine numberNew 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,
tajiri1999 0:4ea758df868a 29 CTRL_REG4 = 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
tajiri1999 0:4ea758df868a 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