32 write_r8(MPL3115_CTRL_REG1, MPL3115_CTRL_REG1_RST_EN);
34 return read_r8(MPL3115_WHO_AM_I);
46 uint8_t ctrl_reg1 =
mode<<MPL3115_CTRL_REG1_ALT_SHIFT |
oversample<<MPL3115_CTRL_REG1_OS_SHIFT |
oneshot<< MPL3115_CTRL_REG1_OST_SHIFT;
47 write_r8(MPL3115_CTRL_REG1, ctrl_reg1);
48 write_r8(MPL3115_CTRL_REG1, ctrl_reg1 | MPL3115_CTRL_REG1_SBYB_ACTIVE);
53 bit_op8(MPL3115_CTRL_REG4, flag, ~flag);
54 bit_op8(MPL3115_CTRL_REG5, channel?0xff:0x00, ~flag);
58 bit_op8(MPL3115_CTRL_REG4, 0x00, ~flag);
62 return getP(MPL3115_P);
66 uint8_t readBuffer[6];
67 if (target==MPL3115_P)
reg_r(0x00, readBuffer, 6);
68 else reg_r(target, readBuffer+MPL3115_OUT_P_MSB, 3);
69 int32_t result=((int32_t)readBuffer[1]<<12)|((int32_t)readBuffer[2]<<4)|(readBuffer[3]>>4);
71 if (
mode==MPL3115_barometer)
72 result_real = (float)result/4000;
74 if (result>0x7FFFF) result = -((~result + 1)&0x7FFFF);
75 result_real = (float) result*0.0625;
81 return getT(MPL3115_T);
85 uint8_t readBuffer[6];
86 if (target==MPL3115_T)
reg_r(0x00, readBuffer, 6);
87 else reg_r(target, readBuffer+MPL3115_OUT_T_MSB, 2);
88 reg_r(target, readBuffer, 2);
89 int16_t result=((int16_t)readBuffer[4]<<4)|(readBuffer[5]>>4);
90 if (result>0x07FF) result = -((~result + 1)&0x7FF);
91 return (
float) result*0.0625;
99 uint16_t P_value = pressure*500;
100 uint8_t register_list[2] = {P_value>>8, P_value};
101 reg_w(MPL3115_BAR_IN_MSB, register_list, 2);
105 int32_t P_target, P_window;
106 if (
mode==MPL3115_barometer) {
107 P_target = pressure*500;
108 P_window = pressure_window*500;
112 P_window = pressure_window;
114 Serial.println(P_target);
115 Serial.println(P_window);
116 uint8_t register_list[6] = {
124 reg_w(MPL3115_P_TGT_MSB, register_list, 6);
This file is header for MPL3115A2_Arduino.
void set_threshold(float pressure, uint8_t temperature, float pressure_window, uint8_t temperature_window)
Set threshold (target) for interruption.
uint8_t oversample
Selects the oversampling ratio from mpl3115_OSR enum.
float getT()
Get the temperature conversion result by reading OUT_T_xxx registers. This clears interruption.
void write_r8(uint8_t reg, uint8_t val)
void set_sealevel()
Set default sea level (101.326kPa) for altitude calculation.
uint8_t oneshot
Put 1 when oneshot mode.
void dis_interrupt(uint8_t flag)
Disable interrupt function of MPL3115A2.
void bit_op8(uint8_t reg, uint8_t mask, uint8_t value)
uint8_t init()
Initialize the device with reset with several GPIO pin configuration.
void set_interrupt(uint8_t flag, mpl3115_INT channel)
Set interrupt function of MPL3115A2.
int reg_w(uint8_t reg_adr, uint8_t *data, uint16_t size)
float getP()
Get the pressure conversion result by reading OUT_P_xxx registers. This clears interruption.
int reg_r(uint8_t reg_adr, uint8_t *data, uint16_t size)
uint8_t read_r8(uint8_t reg)
virtual ~MPL3115A2_Arduino()
void start_conversion()
Start conversion.
mpl3115_mode mode
Selects the mode from baromter or altimeter.