BM1383AGLV sensor library
Dependents: simple-sensor-client rohm-SensorShield-example
Revision 1:997a1eb76a4f, committed 2020-11-20
- Comitter:
- MACRUM
- Date:
- Fri Nov 20 14:55:11 2020 +0000
- Parent:
- 0:d505f3c67a62
- Commit message:
- Add ready-status check
Changed in this revision
BM1383AGLV.cpp | Show annotated file Show diff for this revision Revisions of this file |
BM1383AGLV.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r d505f3c67a62 -r 997a1eb76a4f BM1383AGLV.cpp --- a/BM1383AGLV.cpp Sat Feb 03 14:26:39 2018 +0000 +++ b/BM1383AGLV.cpp Fri Nov 20 14:55:11 2020 +0000 @@ -30,18 +30,28 @@ #include "mbed.h" #include "BM1383AGLV.h" -BM1383AGLV::BM1383AGLV(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr) +BM1383AGLV::BM1383AGLV(PinName sda, PinName scl, int addr) + : + i2c_p(new I2C(sda, scl)), + i2c(*i2c_p), + m_addr(addr) { initialize(); } -BM1383AGLV::BM1383AGLV(I2C &i2c_obj, int addr) : m_i2c(i2c_obj), m_addr(addr) +BM1383AGLV::BM1383AGLV(I2C &i2c_obj, int addr) + : + i2c_p(NULL), + i2c(i2c_obj), + m_addr(addr) { initialize(); } BM1383AGLV::~BM1383AGLV() { + if (NULL != i2c_p) + delete i2c_p; } void BM1383AGLV::initialize() @@ -75,6 +85,15 @@ { uint32_t rawPressure; +#if BM1383AGLV_WAIT_READY_STATUS + uint8_t ready_status = 0; + do { + wait_ms(6); + readRegs(BM1383AGLV_STATUS, &ready_status, 1); + } while(ready_status == 0); +#else + wait_ms(6); +#endif readRegs(BM1383AGLV_PRESSURE_MSB, m_buf, 3); rawPressure = (((uint32_t)m_buf[0] << 16) | ((uint32_t)m_buf[1] << 8) | m_buf[2]&0xFC) >> 2; return (float)rawPressure / (2048); @@ -84,6 +103,15 @@ { int32_t rawTemerature; +#if BM1383AGLV_WAIT_READY_STATUS + uint8_t ready_status = 0; + do { + wait_ms(6); + readRegs(BM1383AGLV_STATUS, &ready_status, 1); + } while(ready_status == 0); +#else + wait_ms(6); +#endif readRegs(BM1383AGLV_TEMPERATURE_MSB, m_buf, 2); rawTemerature = ((int32_t)m_buf[0] << 8) | (m_buf[1]); return (float)rawTemerature / 32; @@ -92,11 +120,11 @@ void BM1383AGLV::readRegs(int addr, uint8_t * data, int len) { char t[1] = {addr}; - m_i2c.write(m_addr, t, 1, true); - m_i2c.read(m_addr, (char *)data, len); + i2c.write(m_addr, t, 1, true); + i2c.read(m_addr, (char *)data, len); } void BM1383AGLV::writeRegs(uint8_t * data, int len) { - m_i2c.write(m_addr, (char *)data, len); + i2c.write(m_addr, (char *)data, len); }
diff -r d505f3c67a62 -r 997a1eb76a4f BM1383AGLV.h --- a/BM1383AGLV.h Sat Feb 03 14:26:39 2018 +0000 +++ b/BM1383AGLV.h Fri Nov 20 14:55:11 2020 +0000 @@ -47,6 +47,8 @@ #define BM1383AGLV_TEMPERATURE_MSB (0x1D) #define BM1383AGLV_TEMPERATURE_LSB (0x1E) +#define BM1383AGLV_WAIT_READY_STATUS 0 + #ifdef _DEBUG extern Serial pc; #define DEBUG_PRINT(...) pc.printf(__VA_ARGS__) @@ -119,7 +121,8 @@ float getTemperature(); private: - I2C m_i2c; + I2C *i2c_p; + I2C &i2c; int m_addr; uint8_t m_buf[3]; void readRegs(int addr, uint8_t * data, int len);