worked to reduce program size
Dependencies: mbed
Revision 0:620064decfb0, committed 2018-10-14
- Comitter:
- giovanniwsn
- Date:
- Sun Oct 14 03:29:55 2018 +0000
- Commit message:
- LPS_25H_capada, to reduce code size
Changed in this revision
diff -r 000000000000 -r 620064decfb0 LPS25H/LPS25H.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LPS25H/LPS25H.cpp Sun Oct 14 03:29:55 2018 +0000 @@ -0,0 +1,61 @@ +/* + * mbed library program + * LPS25H MEMS pressure sensor: 260-1260 hPa absolute digital output barometer + * made by STMicroelectronics + * http://www.st-japan.co.jp/web/catalog/sense_power/FM89/SC1316/PF255230 + * Copyright (c) 2015,'17 Kenji Arai / JH1PJL + * Created: Feburary 21st, 2015 + * Revised: August 21st, 2017 + */ + +#include "LPS25H.h" + +LPS25H::LPS25H (PinName p_sda, PinName p_scl) : + _i2c_p(new I2C(p_sda, p_scl)), _i2c(*_i2c_p) +{ + LPS25H_addr = LPS25H_V_CHIP_ADDR; + //LPS25H_mode = FIFO_HW_FILTER; + init(); +} +// Initialize +void LPS25H::init(void) { + _i2c.frequency(100000); + //if (LPS25H_mode == FIFO_HW_FILTER){ + dt[0] = LPS25H_RES_CONF; + dt[1] = 0x05; + _i2c.write(LPS25H_addr, dt, 2, false); + dt[0] = LPS25H_FIFO_CTRL; + dt[1] = 0xdf; + _i2c.write(LPS25H_addr, dt, 2, false); + dt[0] = LPS25H_CTRL_REG2; + dt[1] = 0x40; + _i2c.write(LPS25H_addr, dt, 2, false); + dt[0] = LPS25H_CTRL_REG1; + dt[1] = 0x90; + _i2c.write(LPS25H_addr, dt, 2, false); + /*} else { + dt[0] = LPS25H_CTRL_REG2; + dt[1] = 0x0; + _i2c.write(LPS25H_addr, dt, 2, false); + dt[0] = LPS25H_CTRL_REG1; + dt[1] = CR_STD_SET; + _i2c.write(LPS25H_addr, dt, 2, false); + }*/ +} + +// Start conv. and get all data +void LPS25H::get(void) { + dt[0] = LPS25H_PRESS_POUT_XL | 0x80; + _i2c.write(LPS25H_addr, dt, 1, true); + _i2c.read(LPS25H_addr, dt, 3, false); + press = dt[2] << 16 | dt[1] << 8 | dt[0]; + alt = (1-pow((press/4096)/1013.25,0.190284))*145366.45; +} + +float LPS25H::pressure() { + return (float)press / 4096; +} + +float LPS25H::altitude(void) { + return alt/3.280839895; +}
diff -r 000000000000 -r 620064decfb0 LPS25H/LPS25H.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LPS25H/LPS25H.h Sun Oct 14 03:29:55 2018 +0000 @@ -0,0 +1,58 @@ +/* + * mbed library program + * LPS25H MEMS pressure sensor: 260-1260 hPa absolute digital output barometer + * made by STMicroelectronics + * http://www.st-japan.co.jp/web/catalog/sense_power/FM89/SC1316/PF255230 + * Copyright (c) 2015,'17 Kenji Arai / JH1PJL + * Created: Feburary 21st, 2015 + * Revised: August 21st, 2017 + */ + +#ifndef LPS25H_H +#define LPS25H_H + +#include "mbed.h" + +// LPS25H Address +// 7bit address = 0b101110x(0x5c or 0x5d depends on SA0/SDO) +#define LPS25H_G_CHIP_ADDR (0x5c << 1) // SA0(=SDO pin) = Ground +#define LPS25H_V_CHIP_ADDR (0x5d << 1) // SA0(=SDO pin) = Vdd + +// MODE Selection +#define FIFO_HW_FILTER 1 +#define FIFO_BYPASS 0 + +// Register's definition +#define LPS25H_RES_CONF 0x10 +#define LPS25H_CTRL_REG1 0x20 +#define LPS25H_CTRL_REG2 0x21 +#define LPS25H_PRESS_POUT_XL 0x28 +#define LPS25H_FIFO_CTRL 0x2e + +// Control Reg. +#define CR_STD_SET ( (1UL << 7) + (1UL << 4) + (1UL << 2) ) + +class LPS25H +{ +public: + LPS25H(PinName p_sda, PinName p_scl); + void get(void); // Start convertion & data save + float pressure(void); // Read pressure data + float altitude(void); // Read altitude data; return altitude in + +protected: + I2C *_i2c_p; + I2C &_i2c; + void init(void); + +private: + char dt[6]; // working buffer + uint8_t LPS25H_addr; // Sensor address + //uint8_t LPS25H_id; // ID + uint8_t LPS25H_ready; // Device is on I2C line = 1, not = 0 + uint8_t LPS25H_mode; // Operation mode + uint32_t press; // pressure raw data + int32_t alt; +}; + +#endif // LPS25H_H
diff -r 000000000000 -r 620064decfb0 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Oct 14 03:29:55 2018 +0000 @@ -0,0 +1,26 @@ +#include "mbed.h" +#include "LPS25H.h" + +Serial pc(USBTX, USBRX);// Serial Debug. + +DigitalOut myled(LED1); +LPS25H baro(p28, p27); + +int main() { + float alt, Bpress; + + + while(1) { + + baro.get(); + Bpress = baro.pressure(); + alt = baro.altitude(); + + pc.printf("pre: %.3f alt: %.3f\n", Bpress, alt); + + myled = 1; + wait(0.5); + myled = 0; + wait(0.5); + } +}
diff -r 000000000000 -r 620064decfb0 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sun Oct 14 03:29:55 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/e95d10626187 \ No newline at end of file